2016-12-02 4 views
1

ich so etwas wie dieses:Passing eingebettet Struktur zu funktionieren

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

type Bar struct { 
    *Foo 
} 

Wie kann ich eine Instanz von Bar an eine Funktion, die nimmt * Foo?

func DoStuff(f *Foo) {} 

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

Ist es möglich, die eingebettete Struktur zu erhalten und an die Funktion zu übergeben?

Der einzige Weg, wie ich das zum Laufen bringen kann, ist, wenn ich * Foo als Mitglied der Struktur behandelt habe und es als bar.foo übergeben habe. Aber das ist irgendwie chaotisch, ist das der einzige Weg?

type Foo struct{} 

type Bar struct { 
    *Foo 
} 

bar := Bar{&Foo{}} 

func(f *Foo) {}(bar.Foo) 

Siehe Struct Types in der Sprache spec Abschnitt:

Antwort

2

Anonyme Felder können durch den Namen des eingebetteten Typs angesprochen werden.

+0

Wow, das war schnell! Muss 12 Minuten warten, aber danke! :-) – flooblebit

Verwandte Themen