Heim >Backend-Entwicklung >Golang >Was ist der Unterschied zwischen der Funktion „new()' und dem Speicheradressenoperator „&' in Go?

Was ist der Unterschied zwischen der Funktion „new()' und dem Speicheradressenoperator „&' in Go?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-23 13:58:02532Durchsuche

What's the Difference Between the

Die Unterschiede zwischen new() und dem „&“-Operator

In Go die new()-Funktion und die „&“-Speicheradresse Operatoren werden beide zum Zuweisen von Speicher verwendet. Es gibt jedoch einige subtile Unterschiede zwischen ihrer Verwendung.

Funktionsvergleich

Sowohl new() als auch &-Operator geben einen Zeiger auf eine neu zugewiesene Speicheradresse zurück. Sie unterscheiden sich jedoch in ihrer Syntax:

  • v := &Vector{} verwendet den „&“-Operator, um die Adresse einer leeren Vektorstruktur zu erhalten.
  • v := new( Vector) verwendet die Funktion new(), um einen Zeiger auf eine neue Vector-Struktur zu erstellen.

Typanalyse

Wie durch das bereitgestellte Codebeispiel, Reflektion, demonstriert Die Analyse zeigt, dass sowohl &Vector{} als auch new(Vector) Zeiger desselben Typs zurückgeben, da beide Zeiger auf Instanzen der Vector-Struktur sind.

Historische Verwirrung

In der Go-Mailingliste wurden bereits Bedenken hinsichtlich der Verwendung von new() und & für die Speicherzuweisung angesprochen, da dies zu Verwirrung führen kann.

Sonderfall

Es ist erwähnenswert dass new() die einzige Methode ist, um einen Zeiger auf einen unbenannten Basistyp, beispielsweise eine Ganzzahl, zu erhalten. Dies ist im folgenden Beispiel zu sehen:

p := new(int) // valid
p := &int{0} // invalid

Präferenz und Verwendung

Letztendlich ist die Wahl zwischen der Verwendung von new() und & für die Speicherzuweisung größtenteils eine Frage der persönlichen Präferenz. Beide Methoden haben die gleiche Funktionalität und liefern die gleichen Ergebnisse. Es ist jedoch wichtig, sich der subtilen Unterschiede zwischen den beiden Operatoren bewusst zu sein und sie entsprechend den spezifischen Anforderungen angemessen einzusetzen.

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen der Funktion „new()' und dem Speicheradressenoperator „&' in Go?. 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