Bei Verwendung eines Strukturtyps als Zeiger (d. h. mit Zeigerempfängern geben Konstruktoren A usw.) hat die Wahl zwischen der Einbettung der Struktur (als B) oder ihres Zeigers (als B) subtile, aber wichtige Konsequenzen.
Nullwerte
Die Nullwerte der beiden Optionen unterscheiden sich erheblich. Einbettungen B erstellen direkt ein eingebettetes Objekt mit seinem Nullwert, was sofortige Operationen darauf ermöglicht:<code class="go">type AObj struct { B } var aObj AObj aObj.Print() // Prints 0 (B's zero value)</code>
<code class="go">type APtr struct { *B } var aPtr APtr aPtr.Print() // Panics (nil pointer dereference)</code>
Kopieren
Das Verhalten beim Kopieren von Objekten hängt vom Einbettungstyp ab. Wenn B als Objekt eingebettet wird, wird beim Kopieren ein neues Objekt erstellt:<code class="go">type AObj struct { B } aObj2 := aObj aObj.X = 1 aObj2.Print() // Prints 0 (copy of B's zero value)</code>
<code class="go">type APtr struct { *B } aPtr.B = &B{} aPtr2 := aPtr aPtr.X = 1 aPtr2.Print() // Prints 1 (shared underlying B)</code>
Das obige ist der detaillierte Inhalt vonEingebettete Struktur vs. Zeiger auf Struktur: Was hat es mit Nullwerten und Kopieren auf sich?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!