为了账号安全,请及时绑定邮箱和手机立即绑定

匿名字段作为指针或嵌入

匿名字段作为指针或嵌入

Go
ABOUTYOU 2021-08-16 15:51:55
匿名字段作为指针或匿名字段与往常一样有什么不同。考虑一下,我如何将 Foo 嵌入到 Bar 结构中。看下面的代码片段:首先以匿名字段作为指针package mainimport (    "fmt")type Foo struct{}func (*Foo) Run() {    fmt.Println("Hello")}type Bar struct {    *Foo}func main() {    bar := new(Bar)    bar.Run() }和往常一样的第二个匿名字段:package mainimport (    "fmt")type Foo struct{}func (*Foo) Run() {    fmt.Println("Hello")}type Bar struct {    Foo}func main() {    bar := new(Bar)    bar.Run()}它们之间有什么不同?更新:我从revel webframework 中获取了这个示例,它们是如何扩展自定义控制器的。看看这个代码片段type App struct {    *revel.Controller}为什么狂欢使用指针来嵌入控制器结构。它的意义是什么?
查看完整描述

2 回答

?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

只要它形成有效的选择器,除了以下(以及使用值与指针的通常权衡)外,用法没有区别:

  • 如果 x 是指针类型并且值为 nil 并且 xf 表示结构字段,则分配给 xf 或评估 xf 会导致运行时恐慌。

  • 如果 x 是接口类型并且值为 nil,则调用或评估方法 xf 会导致运行时恐慌。

还有这个 :

  • 如果 S 包含匿名字段 T,则 S 和 *S 的方法集都包含接收者 T 的提升方法。 *S 的方法集还包括接收者 *T 的提升方法。

  • 如果 S 包含匿名字段 *T,则 S 和 *S 的方法集都包含带有接收者 T 或 *T 的提升方法。


查看完整回答
反对 回复 2021-08-16
  • 2 回答
  • 0 关注
  • 176 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信