„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Beim Einbetten von Strukturen in Go: Zeiger oder eingebettete Werte?

Beim Einbetten von Strukturen in Go: Zeiger oder eingebettete Werte?

Veröffentlicht am 15.11.2024
Durchsuche:698

When Embedding Structs in Go: Pointers or Embedded Values?

Strukturen einbetten: Wann Zeiger bevorzugt werden sollten

Beim Einbetten einer Struktur in eine andere gibt es zwei Möglichkeiten: die Verwendung eines Zeigers oder eines eingebetteten Werts . Um diese Entscheidung zu leiten, ist es wichtig, die Spezifikationen zu verstehen und die Vorteile jedes Ansatzes zu berücksichtigen.

Zeiger vs. eingebettete Werte

Gemäß der Go-Spezifikation ist an Ein anonymes Feld (auch als eingebettetes Feld bezeichnet) kann als Typname oder als Zeiger auf einen Nicht-Schnittstellentypnamen deklariert werden. Dies bedeutet, dass Sie im folgenden Beispiel die Wahl haben, den Typ log.Logger oder einen Zeiger *log.Logger für das Logger-Feld zu verwenden:

type Job struct {
    Command string
    *log.Logger
}

Vorteile von Zeigern

Der Artikel „Embedding in Go“ von Eric Urban hebt die Vorteile des Einbettens eines Zeigers hervor, der als „embed by-pointer“ bezeichnet wird ." Dazu gehören:

  • Initialisierungsflexibilität: Funktionen, die das NewX-Idiom verwenden, geben normalerweise eine Struktur per Zeiger zurück, was eine einfache Initialisierung ermöglicht.
  • Dynamische Erweiterbarkeit: Durch das Einbetten eines Zeigers können Sie die eingebettete Instanz zur Laufzeit dynamisch ändern, ohne die Struktur instanziieren zu müssen. Dies kann für Szenarien wie das Flyweight-Muster nützlich sein.

Beispiel für die Zeigereinbettung

type Bitmap struct{
    data [4][5]bool
}

type Renderer struct{
    *Bitmap //Embed by pointer
    on uint8
    off uint8
}

In diesem Beispiel bettet der Renderer-Typ eine Bitmap per Zeiger ein. Dies bedeutet, dass mehrere Instanzen von Renderer eine einzelne Bitmap-Instanz gemeinsam nutzen und ihr Verhalten unabhängig voneinander anpassen können.

Technische Einschränkungen

Es ist wichtig zu beachten, dass Sie keine Zeiger auf Zeiger verwenden können oder Zeiger auf Schnittstellen als anonyme Felder. Diese Einschränkung ergibt sich aus der Tatsache, dass diese Typen keine Methoden haben, was ein zentraler Aspekt der Einbettung ist. Methoden werden vom eingebetteten Typ zum Einbettungstyp heraufgestuft, sodass Sie direkt darauf zugreifen können.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3