Heim > Backend-Entwicklung > Golang > Wie kann ich eingebettete Strukturen in Go effizient initialisieren?

Wie kann ich eingebettete Strukturen in Go effizient initialisieren?

Mary-Kate Olsen
Freigeben: 2024-12-17 01:03:24
Original
701 Leute haben es durchsucht

How Can I Efficiently Initialize Embedded Structs in Go?

Strukturinitialisierung mit eingebetteten Strukturen in Go

Das Erstellen von Strukturen ist in Go eine gängige Praxis für die Organisation und Wiederverwendung von Code. Das Initialisieren zusammengesetzter Strukturen kann jedoch eine Herausforderung darstellen, wenn ein Unterfeld von einer eingebetteten Struktur geerbt wird.

Betrachten Sie das folgende Beispiel:

type Base struct {
    ID string
}

type Child struct {
    Base
    a int
    b int
}
Nach dem Login kopieren

Um Child zu initialisieren, könnte man erwarten, Folgendes zu verwenden Syntax:

child := Child{ ID: id, a: a, b: b }
Nach dem Login kopieren
Nach dem Login kopieren

Dies führt jedoch aufgrund der unbekannten Feld-ID im Child-Strukturliteral zu einem Kompilierungsfehler. Um dieses Problem zu umgehen, muss das ID-Feld separat initialisiert werden:

child := Child{ a: 23, b: 42 }
child.ID = "foo"
Nach dem Login kopieren

Dieser Ansatz verstößt gegen Kapselungsprinzipien, indem er die Tatsache offenlegt, dass ID ein eingebettetes Feld ist. Außerdem besteht das Risiko, dass die Initialisierung unterbrochen wird, wenn ein öffentliches Feld in eine eingebettete Struktur verschoben wird.

Um dieses Problem zu beheben, gibt es zwei empfohlene Lösungen:

  1. Verschachtelte zusammengesetzte Literale:

    Verschachtelte zusammengesetzte Literale können verwendet werden, um ein eingebettetes Feld in einem einzelnen Feld zu initialisieren Ausdruck:

    child := Child{Base: Base{ID: id}, a: a, b: b}
    Nach dem Login kopieren
  2. Vorgeschlagene Änderung in Go:

    Go-Ausgabe 9859 schlägt eine Änderung vor, um zusammengesetzte Literale mit dem Feldzugriff für eingebettete Systeme konsistent zu machen Typen. Bei Implementierung würde diese Änderung die folgende Syntax ermöglichen:

    child := Child{ ID: id, a: a, b: b }
    Nach dem Login kopieren
    Nach dem Login kopieren

Es ist wichtig zu beachten, dass eingebettete Typen keine Kapselung im eigentlichen Sinne bieten. Eine Anwendung kann trotz Verwendung der child.ID-Syntax immer noch direkt auf child.Base.ID zugreifen.

Das obige ist der detaillierte Inhalt vonWie kann ich eingebettete Strukturen in Go effizient initialisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage