Verschachtelte Strukturen und Feldinitialisierungsliterale
In Go können Strukturen andere Strukturen einbetten, die als verschachtelte Strukturen bezeichnet werden. Beim Initialisieren verschachtelter Strukturen mit literalen Mitgliedswerten tritt häufig ein Problem auf, bei dem der Compiler ein unbekanntes Feld in der übergeordneten Struktur markiert.
Bedenken Sie beispielsweise den folgenden Code:
type A struct { MemberA string } type B struct { A MemberB string } b := B { MemberA: "test1", MemberB: "test2", }
Hier ist die B-Struktur so definiert, dass sie ein anonymes Feld vom Typ A enthält. Wenn jedoch versucht wird, das MemberA-Feld der verschachtelten A-Struktur direkt zu initialisieren, löst der Compiler eine aus Fehler:
unknown B field 'MemberA' in struct literal
Dieser Fehler tritt auf, weil die anonyme Struktur während der Initialisierung nur über ihren Typnamen bekannt ist. Die mit der anonymen Struktur verknüpften Mitglieder und Funktionen werden erst exportiert, nachdem die Instanz erstellt wurde.
Um dieses Problem zu beheben, müssen Sie bei der Initialisierung eine gültige Instanz der anonymen Struktur (in diesem Fall A) angeben das verschachtelte Feld:
b := B { A: A{MemberA: "test1"}, MemberB: "test2", }
Indem Sie explizit eine Instanz der anonymen Struktur bereitstellen, versorgen Sie den Compiler mit den notwendigen Informationen, um auf MemberA zuzugreifen Feld.
Die Compiler-Fehlermeldung „unbekanntes B-Feld ‚MemberA‘ im Strukturliteral“ weist darauf hin, dass das MemberA-Feld im B-Strukturkontext nicht erkannt wird, da es zur anonymen A-Struktur gehört.
Das obige ist der detaillierte Inhalt vonWie initialisiere ich verschachtelte Strukturen in Go mithilfe von Literalen korrekt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!