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:
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.
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