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

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

Patricia Arquette
Patricia ArquetteOriginal
2024-12-18 14:47:10190Durchsuche

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{}

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!

Stellungnahme:
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