Verschachtelte zusammengesetzte Literale verwenden, um zusammengesetzte Strukturen zu initialisieren
In Go kann das Initialisieren einer zusammengesetzten Struktur beim Einbetten anderer Strukturen schwierig sein. Die ursprüngliche Syntax von child := Child{ ID: id, a: a, b: b } kann zu einem Fehler führen, da die eingebettete Feld-ID nicht direkt initialisiert werden kann.
Um dieses Problem zu beheben und beizubehalten Kapselung, verwenden Sie verschachtelte zusammengesetzte Literale:
child := Child{ Base: Base{ID: id}, // Initialize the embedded struct a: a, b: b, }
Dieser Ansatz ermöglicht die Initialisierung der zusammengesetzten Struktur in einem einzigen Ausdruck unter Beibehaltung der Kapselung durch Verschachtelung der eingebetteten Strukturinitialisierung.
Eine andere Lösung, wie in der Frage angedeutet, ist die Verwendung von Factory-Methoden wie NewFoo(). Allerdings stellen verschachtelte zusammengesetzte Literale eine prägnantere und sicherere Alternative dar.
Vorgeschlagene Änderung bei zusammengesetzten Literalen
Go-Ausgabe 9859 schlägt eine Änderung der Syntax zusammengesetzter Literale zur Unterstützung vor Direktes Initialisieren eingebetteter Felder. Diese Änderung würde die ursprüngliche Syntax von child := Child{ ID: id, a: a, b: b } ermöglichen.
Überlegungen zur Kapselung
Das Einbetten von Strukturen ist nicht möglich eine strikte Kapselungsfunktion in Go. Es ermöglicht zwar den indirekten Zugriff auf eingebettete Felder, erzwingt ihn jedoch nicht. Der Code kann zusätzlich zur Verwendung von child.ID weiterhin direkt auf child.Base.ID zugreifen. Die Verantwortung für die Kapselung liegt also letztendlich beim Design und der Verwendung der Anwendung.
Das obige ist der detaillierte Inhalt vonWie kann ich eingebettete Strukturen in Go mithilfe zusammengesetzter Literale effizient initialisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!