Embedding ein Typ in einer Struktur fügt ein Feld auf die Struktur, und Sie können die uneingeschränkten Typnamen darauf zu verweisen verwenden (unqualifizierte Mittel auslassen die Paketnamen und die optionalen Zeigerzeichen).
Zum Beispiel:
box := rated.Box
fmt.Printf("%T %+v", box, box)
Output (versuchen Sie es auf dem Go Playground):
main.Box {Name:foo}
Beachten Sie, dass assignment kopiert den Wert, so dass die box
lokale Variable wird eine Kopie des Wertes halten das Feld RatedBox.Box
. Wenn man sie zu den „gleichen“ (Punkt auf den gleichen Wert Box
) möchten, verwenden Sie einen Zeiger, z.B .:
box := &rated.Box
fmt.Printf("%T %+v", box, box)
Aber hier natürlich Art von box
wird *Box
sein.
Oder Sie können wählen, um den Zeiger Typ einzubetten:
type RatedBox struct {
*Box
Points int
}
Und dann (versuchen Sie es auf dem Go Playground):
rated := RatedBox{Box: &Box{Name: "foo"}, Points: 10}
box := rated.Box
fmt.Printf("%T %+v", box, box)
Ausgang der letzten 2:
*main.Box &{Name:foo}
Mögliches Duplikat von [Golang: Ist eine Konvertierung zwischen verschiedenen Strukturtypen möglich?] (Https://stackoverflow.com/questions/24613271/golang -is-conversion-zwischen-verschiedenen-struct-types-möglich) –
Kannst du nicht benutzen. Kasten: = rated.Box ?? –
Auch bezogen werden: https://stackoverflow.com/a/37725577/19020 –