„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > 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?

Veröffentlicht am 08.11.2024
Durchsuche:136

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 & 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.

Typ Analyse

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

Historische Verwirrung

Die Go-Mailingliste hat zuvor Bedenken hinsichtlich der Verwendung von new() und & für die Speicherzuweisung besprochen. 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 zu erhalten, z eine ganze Zahl. Dies ist im folgenden Beispiel zu sehen:

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

Preference and Usage

Letztendlich ist die Wahl zwischen der Verwendung von new() und & für die Speicherzuweisung weitgehend eine Frage von persönliche 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.

Freigabeerklärung Dieser Artikel wird unter folgender Adresse abgedruckt: 1729661717 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3