匿名字段作为指针或嵌入

匿名字段作为指针或匿名字段与往常一样有什么不同。考虑一下,我如何将 Foo 嵌入到 Bar 结构中。


看下面的代码片段:


首先以匿名字段作为指针


package main


import (

    "fmt"

)


type Foo struct{}


func (*Foo) Run() {

    fmt.Println("Hello")

}


type Bar struct {

    *Foo

}


func main() {

    bar := new(Bar)

    bar.Run() 

}

和往常一样的第二个匿名字段:


package main


import (

    "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

}

为什么狂欢使用指针来嵌入控制器结构。它的意义是什么?


ABOUTYOU
浏览 177回答 2
2回答

吃鸡游戏

只要它形成有效的选择器,除了以下(以及使用值与指针的通常权衡)外,用法没有区别:如果 x 是指针类型并且值为 nil 并且 xf 表示结构字段,则分配给 xf 或评估 xf 会导致运行时恐慌。如果 x 是接口类型并且值为 nil,则调用或评估方法 xf 会导致运行时恐慌。还有这个 :如果 S 包含匿名字段 T,则 S 和 *S 的方法集都包含接收者 T 的提升方法。 *S 的方法集还包括接收者 *T 的提升方法。如果 S 包含匿名字段 *T,则 S 和 *S 的方法集都包含带有接收者 T 或 *T 的提升方法。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go