Heim >Backend-Entwicklung >Golang >Wie initialisiere ich zusammengesetzte Strukturen in Go richtig?

Wie initialisiere ich zusammengesetzte Strukturen in Go richtig?

DDD
DDDOriginal
2024-12-24 04:26:17427Durchsuche

How to Properly Initialize Composed Structs in Go?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn