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

Linda Hamilton
Freigeben: 2024-10-31 06:28:30
Original
233 Leute haben es durchsucht

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:

<code class="go">type Job struct {
    Command string
    *log.Logger
}</code>
Nach dem Login kopieren

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

<code class="go">type Bitmap struct{
    data [4][5]bool
}

type Renderer struct{
    *Bitmap //Embed by pointer
    on uint8
    off uint8
}</code>
Nach dem Login kopieren

In diesem Beispiel bettet der Renderer-Typ eine Bitmap ein Zeiger. Dies bedeutet, dass mehrere Instanzen von Renderer eine einzige 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 hochgestuft, sodass Sie direkt darauf zugreifen können.

Das obige ist der detaillierte Inhalt vonBeim Einbetten von Strukturen in Go: Zeiger oder eingebettete Werte?. 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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!