Heim > Backend-Entwicklung > Golang > Wann sollte ein Zeiger vs. eine Wertreferenz für eingebettete Felder in Go verwendet werden?

Wann sollte ein Zeiger vs. eine Wertreferenz für eingebettete Felder in Go verwendet werden?

DDD
Freigeben: 2024-10-30 23:47:29
Original
797 Leute haben es durchsucht

When to Use a Pointer vs. Value Reference for Embedded Fields in Go?

Einbettung: Wann man einen Zeiger vs. Wertreferenz verwendet

Beim Einbinden einer Struktur in eine andere in Golang besteht die Wahl zwischen der Verwendung von a Zeiger oder eine Wertreferenz. Betrachten Sie den folgenden Codeausschnitt:

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

In diesem Beispiel haben wir den Typ *log.Logger, dargestellt durch einen Zeiger, in die Jobstruktur eingebettet. Alternativ hätten wir eine Wertreferenz wie folgt verwenden können:

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

Während beide Ansätze eine Einbettung erreichen, unterscheiden sich ihre Auswirkungen. Gemäß der Go-Spezifikation unterstützen eingebettete Felder entweder den Typ selbst oder einen Zeiger auf einen Nicht-Schnittstellentyp. Entscheidend ist, dass der eingebettete Typ kein Zeigertyp sein kann.

Das Einbetten eines Zeigers, bekannt als „Einbetten nach Zeiger“, bietet bestimmte Vorteile. Erstens ermöglicht es die Nutzung von Funktionen, die dem NewX-Muster folgen, bei dem Strukturen per Referenz initialisiert und zurückgegeben werden. Zweitens ermöglicht es die dynamische Zuweisung verschiedener Instanzen zum eingebetteten Typ zur Laufzeit.

Betrachten Sie beispielsweise den folgenden Code:

<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 Referenz. Dadurch kann eine einzelne Bitmap-Instanz als eingebettete Instanz für mehrere Renderer-Instanzen dienen, jede mit ihrem einzigartigen Zeichensatz. Die Ausgabe dieses Codes zeigt, wie mehrere Renderer mit derselben zugrunde liegenden Datenstruktur arbeiten können.

OXXO
OXOO
OXOO
OXOO
.@@.
.@..
.@..
.@..
Nach dem Login kopieren

Im Gegensatz dazu bietet das Einbetten einer Wertreferenz diese Vorteile nicht. Für den Zugriff auf seine Methoden ist jedoch nicht die Instanziierung eines eingebetteten Typs erforderlich. Letztendlich hängt die Entscheidung zwischen der Verwendung eines Zeigers oder einer Wertreferenz von den spezifischen Anforderungen der Anwendung und den gewünschten Verhaltensweisen für eingebettete Felder ab.

Das obige ist der detaillierte Inhalt vonWann sollte ein Zeiger vs. eine Wertreferenz für eingebettete Felder in Go verwendet werden?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage