Wertinitialisierung in Go
In Go scheinen die Verwendung von & zur Initialisierung eines Werts und die Verwendung von new() unterschiedliche Ansätze zu sein, aber ihre Die Funktionalität ist im Wesentlichen die gleiche.
Veranschaulichung der Äquivalenz
Beachten Sie die folgenden Codeausschnitte:
v := &Vector{}
und
v := new(Vector)
Hier stellt Vector einen benutzerdefinierten Typ dar. Beide Ansätze weisen Speicher für die Vector-Struktur zu und geben einen Zeiger auf den zugewiesenen Speicher zurück.
Um diese Äquivalenz zu demonstrieren, vergleichen wir die resultierenden Typen:
package main import "fmt" import "reflect" type Vector struct { x int y int } func main() { v := &Vector{} x := new(Vector) fmt.Println(reflect.TypeOf(v)) fmt.Println(reflect.TypeOf(x)) }
Ausgabe:
*main.Vector *main.Vector
Wie ersichtlich, liefern beide Methoden Zeiger auf den Vektor Typ.
Historischer Hintergrund und Präferenz
Während beide Methoden das gleiche Ergebnis erzielen, kann ihre jeweilige Historie die Präferenz des Entwicklers beeinflussen. new() wurde früher in der Go-Entwicklung eingeführt und war die einzige Möglichkeit, Zeiger auf Basistypen wie Ganzzahlen zu initialisieren. Seitdem wurde & als allgemeinerer Ansatz hinzugefügt, der für jeden Typ funktioniert.
Fazit
Letztendlich ist die Wahl zwischen & und new() eine Sache der Präferenz. Beide Ansätze weisen Speicher zu und geben einen Zeiger auf den zugewiesenen Speicher zurück, was zu identischer Funktionalität führt.
Das obige ist der detaillierte Inhalt vonGo-Initialisierung: „&' vs. „new()': Was ist der Unterschied?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!