Heim >Backend-Entwicklung >Golang >Warum scheint die Methode von Go mit einem Zeigerempfänger Nicht-Zeigerwerte zu ändern?
Methode mit Zeigerempfänger
In der Tour of Go untersucht Übung 51 Methodenempfänger. Die bereitgestellte Erklärung besagt, dass die Scale-Methode, die einen Zeiger auf einen Vertex bearbeitet, keine Auswirkung hat, wenn sie einen Vertex-Wert direkt empfängt. Die Änderung der Hauptfunktion zur Übergabe eines Nicht-Zeiger-Vertex widerspricht jedoch dieser Behauptung.
Warum die Diskrepanz?
Obwohl der Code einen Nicht-Zeiger-Wert empfängt, Scale Ändert die Variable erfolgreich. Dieses Verhalten kann auf das starke Tippsystem von Go zurückgeführt werden. Wenn in einem bestimmten Kontext ein Zeiger auf T erwartet wird, kann nur ein Zeiger auf T (*T) diese Anforderung erfüllen.
Der Compiler verwendet eine Transformation hinter den Kulissen, um dieses Verhalten zu ermöglichen:
"Ein Methodenaufruf x.m() ist gültig, wenn der Methodensatz von (dem Typ von) x m enthält und die Argumentliste der Parameterliste von m zugewiesen werden kann. Wenn x adressierbar ist und der Methodensatz von &x enthält m, x.m() ist eine Abkürzung für (&x).m():"
Im Wesentlichen schreibt der Compiler den Code neu, um einen Zeiger auf den Nicht-Zeigerwert zu übergeben, wenn die empfangende Variable einen Zeigerempfänger hat Typ. Dadurch kann die Scale-Methode die ursprüngliche Variable ändern.
Das obige ist der detaillierte Inhalt vonWarum scheint die Methode von Go mit einem Zeigerempfänger Nicht-Zeigerwerte zu ändern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!