Heim > Backend-Entwicklung > Golang > Können Zeigermethoden in Go für Nicht-Zeigerwerte aufgerufen werden?

Können Zeigermethoden in Go für Nicht-Zeigerwerte aufgerufen werden?

Patricia Arquette
Freigeben: 2024-12-19 22:24:13
Original
547 Leute haben es durchsucht

Can Pointer Methods Be Called on Non-Pointer Values in Go?

Zeigermethoden für Nicht-Zeigertypen

In der Antwort auf eine vorherige Frage heißt es, dass Zeigermethoden nur für Zeiger aufgerufen werden können. Dies scheint jedoch falsch zu sein, wie der folgende Code zeigt, der erfolgreich eine Zeigermethode für einen Nicht-Zeigerwert aufruft:

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()
    fmt.Println("Wheels:", c.wheels)
}
Nach dem Login kopieren

Erklärung

The Der Schlüssel zum Verständnis dieses Verhaltens liegt in der Tatsache, dass der Methodenempfänger ein Zeiger ist. Wenn Sie c.fourWheels() aufrufen, ist der Empfängerwert c ein Nichtzeiger. Da der Empfängertyp jedoch ein Zeiger ist, wird dies als Abkürzung für (&c).fourWheels() interpretiert.

Gemäß der Go-Spezifikation gilt beim Aufruf einer Methode, ob der Empfängerwert adressierbar ist und der Da der Empfängertyp ein Zeiger ist, wird der Methodenaufruf als Zeigermethodenaufruf interpretiert. In unserem Fall ist der Empfängerwert c adressierbar und der Empfängertyp *car ist ein Zeiger, sodass der Methodenaufruf c.fourWheels() effektiv (&c).fourWheels() aufruft.

Dieses Verhalten ist im Einklang mit der Aussage, dass Wertmethoden für Zeiger und Werte aufgerufen werden können, während Zeigermethoden nur für Zeiger aufgerufen werden können. Wenn bei Zeigermethoden der Empfängerwert kein Zeiger ist, muss er dereferenziert werden, um einen Zeigerwert zu erhalten, der als Empfänger verwendet werden kann.

Das obige ist der detaillierte Inhalt vonKö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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage