匿名字段作为指针或匿名字段与往常一样有什么不同。考虑一下,我如何将 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 的提升方法。
- 2 回答
- 0 关注
- 176 浏览
添加回答
举报
0/150
提交
取消