Einbettung in Go: Wann man einen Zeiger verwendet
Beim Einbetten einer Struktur in eine andere Struktur hängt die Entscheidung zwischen der Verwendung eines Zeigers oder eines Werts davon ab auf die gewünschte Funktionalität und Überlegungen zur Speicherverwaltung.
Verwenden eines Werts
Das Einbetten einer Struktur nach Wert bedeutet, dass eine Kopie der eingebetteten Struktur in der enthaltenden Struktur gespeichert wird. Dies eignet sich für Situationen, in denen:
<code class="go">type Job struct { Command string log.Logger }</code>
Verwendung eines Zeigers
Das Einbetten einer Struktur per Zeiger ermöglicht die gemeinsame Nutzung des Speichers zwischen mehreren Instanzen der enthaltenden Struktur. Dies ist nützlich für:
<code class="go">type Job struct { Command string *log.Logger }</code>
Vorteile der Einbettung durch Zeiger
Eric Urban („hydrogen18“) hat den Begriff „Einbettung durch Zeiger“ geprägt. Es bietet Vorteile wie:
Fliegengewichtsmuster mit Einbettung durch Zeiger
Durch das Einbetten eines Zeigers auf eine Bitmap-Struktur können mehrere Renderer-Strukturen dieselben zugrunde liegenden Bitmap-Daten gemeinsam nutzen, was den Speicherverbrauch reduziert und die Laufzeit ermöglicht Flexibilität.
<code class="go">type Bitmap struct{ data [4][5]bool } type Renderer struct{ *Bitmap //Embed by pointer on uint8 off uint8 }</code>
Einschränkungen der Einbettung durch Zeiger
Anonyme Felder können keinen Zeiger auf einen Zeiger oder Zeiger auf einen Schnittstellentyp haben, da diese Typen keine Methoden haben . Diese Einschränkung soll eine falsche Verwendung von Zeigern auf Schnittstellen verhindern und die Konsistenz in der Sprache wahren.
Das obige ist der detaillierte Inhalt vonEinbettung in Go: Wann sollte ein Zeiger vs. ein Wert verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!