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