Komponierte Strukturen in Go initialisieren
Das Erstellen von Strukturen in Go beinhaltet das Einbetten einer Struktur in eine andere. Während diese Technik Vorteile bei der Codeorganisation und Wiederverwendung bietet, kann sie auch Herausforderungen bei der Initialisierung mit sich bringen.
Beim Initialisieren einer zusammengesetzten Struktur ist der direkte Zugriff auf die Felder der eingebetteten Struktur möglicherweise nicht möglich. Betrachten Sie das folgende Codebeispiel:
type Base struct { ID string } type Child struct { Base a int b int } // Error: unknown field 'ID' in struct literal of type Child // child := Child{ ID: id, a: a, b: b }
In diesem Beispiel schlägt der Versuch, das ID-Feld direkt im Child-Strukturliteral zu initialisieren, aufgrund der Unzugänglichkeit des Feldes fehl. Um dieses Problem zu umgehen, muss man zunächst die Child-Struktur ohne ID initialisieren und dann die ID separat festlegen.
Dieser Ansatz beeinträchtigt jedoch die Kapselung, indem die interne Struktur der Child-Struktur für ihre Benutzer offengelegt wird. Um dies zu vermeiden, bietet Go eine Methode zum sicheren Initialisieren zusammengesetzter Strukturen: verschachtelte zusammengesetzte Literale.
Verschachtelte zusammengesetzte Literale verwenden
Verschachtelte zusammengesetzte Literale ermöglichen Ihnen die Initialisierung eingebetteter Strukturwerte innerhalb eines einzelnen Ausdrucks:
child := Child{Base: Base{ID: id}, a: a, b: b}
In diesem Beispiel wird die Basisstruktur zuerst initialisiert, wobei das ID-Feld festgelegt ist auf den gewünschten Wert. Die resultierende Basisstruktur wird dann verwendet, um die untergeordnete Struktur zu initialisieren.
Alternativer Ansatz
Go-Ausgabe 9859 schlägt eine Änderung vor, die die Initialisierung eingebetteter Strukturen vereinfachen würde. Diese Änderung würde den Child{ ID: id, a: a, b: b }-Ausdruck ermöglichen und ihn mit dem Feldzugriff für eingebettete Typen konsistent machen.
Überlegungen zur Kapselung
Es ist wichtig zu beachten, dass eingebettete Typen in Go keine echte Kapselung bieten. Anwendungen können weiterhin direkt auf die Felder der eingebetteten Struktur zugreifen und dabei die Methoden der umschließenden Struktur umgehen. Berücksichtigen Sie daher beim Entwerfen Ihrer Strukturen sorgfältig die Notwendigkeit einer Kapselung.
Das obige ist der detaillierte Inhalt vonWie initialisiere ich zusammengesetzte Strukturen in Go richtig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!