Heim >Backend-Entwicklung >Golang >Warum können Zeigermethoden in Go für Nicht-Zeigerwerte aufgerufen werden?
Zeigermethoden für Nicht-Zeigertypen erklärt
In Go besagt die Konvention, dass Wertmethoden sowohl für Zeiger als auch für Werte aufgerufen werden können. während Zeigermethoden auf Zeiger beschränkt sind. Eine offensichtliche Ausnahme von dieser Regel ist jedoch die Möglichkeit, Zeigermethoden auf Nicht-Zeigerwerte auszuführen.
Bedenken Sie den folgenden Codeausschnitt:
package main import "fmt" type car struct { wheels int } func (c *car) fourWheels() { c.wheels = 4 } func main() { var c = car{} fmt.Println("Wheels:", c.wheels) c.fourWheels() // Here, a pointer method is invoked on a non-pointer value fmt.Println("Wheels:", c.wheels) }
Der Code führt die Zeigermethode fourWheels erfolgreich aus auf dem Nicht-Zeigerwert c. Dies scheint im Widerspruch zur etablierten Regel zu stehen.
In Wirklichkeit verwenden Sie beim Aufruf der fourWheels-Methode für den Nicht-Zeigerwert c eine Kurzschreibweise. Der Ausdruck c.fourWheels() entspricht (&c).fourWheels().
In der Go-Spezifikation heißt es: „Wenn x adressierbar ist und der Methodensatz von &x m enthält, ist x.m() eine Abkürzung für ( &x).m()."
Mit anderen Worten: Go dereferenziert implizit den Nicht-Zeigerwert c, um einen Zeiger darauf zu erhalten, der dann als Empfänger verwendet wird für die Zeigermethode.
Um die Regel über Zeigermethoden zu verdeutlichen, sollte sie wie folgt interpretiert werden:
Das obige ist der detaillierte Inhalt vonWarum können Zeigermethoden in Go für Nicht-Zeigerwerte aufgerufen werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!