Heim > Backend-Entwicklung > Golang > Go-Initialisierung: „&' vs. „new()': Was ist der Unterschied?

Go-Initialisierung: „&' vs. „new()': Was ist der Unterschied?

Patricia Arquette
Freigeben: 2024-12-18 14:47:10
Original
188 Leute haben es durchsucht

Go Initialization:  `&` vs. `new()`: What's the Difference?

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{}
Nach dem Login kopieren

und

v := new(Vector)
Nach dem Login kopieren

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))
}
Nach dem Login kopieren

Ausgabe:

*main.Vector
*main.Vector
Nach dem Login kopieren

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!

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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage