将go嵌入式结构传递给函数

flo*_*bit 3 go

我有这样的事情:

type Foo struct{}
func NewFoo() *Foo { ... }

type Bar struct {
    *Foo
}
Run Code Online (Sandbox Code Playgroud)

如何将Bar的实例传递给带有* Foo的函数?

func DoStuff(f *Foo) {}

func main() {
    bar := Bar{NewFoo()}
    DoStuff(bar) // <- go doesn't like this, type mismatch
}
Run Code Online (Sandbox Code Playgroud)

是否有可能获得嵌入式结构并将其传递给函数?

我可以使它起作用的唯一方法是,如果我将* Foo视为结构的成员并将其传递为bar.foo。但这有点混乱,这是唯一的方法吗?

Jim*_*imB 5

匿名字段可以通过嵌入类型的名称来寻址:

type Foo struct{}

type Bar struct {
    *Foo
}

bar := Bar{&Foo{}}

func(f *Foo) {}(bar.Foo)
Run Code Online (Sandbox Code Playgroud)

请参阅语言规范中的“ 结构类型”部分。