Heim >Backend-Entwicklung >Golang >Wie initialisiere ich eingebettete Strukturen in Go richtig?
So initialisieren Sie eingebettete Strukturen in Golang
In Go ist es möglich, Strukturen innerhalb anderer Strukturen zu definieren, um verschachtelte Datenstrukturen zu erstellen. Das Initialisieren dieser verschachtelten Strukturen kann jedoch eine Herausforderung darstellen.
Betrachten Sie das folgende Beispiel:
type DetailsFilter struct { Filter struct { Name string ID int } }
Beim Initialisieren der DetailsFilter-Struktur mit einer eingebetteten Filterstruktur kann es zu einem Fehler kommen, wenn Sie es versuchen um dem Filterfeld eine generische Zuordnung zuzuweisen.
var M map[string]interface{} M = make(map[string]interface{}) M["Filter"] = map[string]interface{}{"Name": "XYZ", "ID": 5} var detailsFilter = DetailsFilter{Filter: M["Filter"]}}
Die Fehlermeldung, die Sie erhalten, lautet: „kann (Typschnittstelle {}) nicht als Typ verwenden.“ Struktur im Feldwert: Typzusicherung erforderlich.“
Der Grund für diesen Fehler ist, dass ein anonymes Strukturfeld, wie es hier für Filter verwendet wird, erfordert, dass bei der Initialisierung der genaue Typ angegeben wird. Sie können dieses Problem lösen, indem Sie den Typ des Filterfelds explizit in der anonymen Struktur definieren:
type DetailsFilter struct { Filter struct { Name string ID int } } df := DetailsFilter{Filter: Filter{Name: "XYZ", ID: 5}}
Alternativ können Sie keine anonyme Struktur für Filter verwenden und ihm stattdessen einen benannten Typ geben:
type Filter struct { Name string ID int } type DetailsFilter struct { Filter Filter } df := DetailsFilter{Filter: Filter{Name: "XYZ", ID: 5}}
Mit beiden Methoden können Sie die DetailsFilter-Struktur mit der verschachtelten Filter-Struktur initialisieren.
Das obige ist der detaillierte Inhalt vonWie initialisiere ich eingebettete Strukturen in Go richtig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!