Heim > Backend-Entwicklung > Golang > Warum kann ich in Go Zeigermethoden für Nicht-Zeigerwerte aufrufen?

Warum kann ich in Go Zeigermethoden für Nicht-Zeigerwerte aufrufen?

Mary-Kate Olsen
Freigeben: 2024-12-30 13:00:18
Original
976 Leute haben es durchsucht

Why Can I Call Pointer Methods on Non-Pointer Values in Go?

Zeigermethodenaufruf auf Nicht-Zeigerwerte

In Go ist es trotz der Möglichkeit möglich, Zeigermethoden auf Nicht-Zeigerwerte aufzurufen Allgemeine Regel, dass Zeigermethoden nur auf Zeiger aufgerufen werden können. Dieses scheinbar widersprüchliche Verhalten kann durch das Konzept der automatischen Zeiger-Dereferenzierung erklärt werden.

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

Der Ausdruck c.fourWheels() ist eine Abkürzung für (&c) .fourWheels(). Dies liegt daran, dass der Empfänger von fourWheels ein Zeiger und c ein Nicht-Zeigerwert ist. Da c adressierbar ist, dereferenziert der Compiler es automatisch, um einen Zeiger auf den car-Wert zu erhalten, der dann als Empfänger verwendet wird.

Dieses Verhalten ist in der Go-Spezifikation explizit angegeben:

Wenn x adressierbar ist und der Methodensatz von &x m enthält, ist x.m() die Abkürzung für (&x).m().

Während die allgemeine Regel zu Zeigermethoden weiterhin gültig bleibt, ermöglicht die automatische Dereferenzierung von Zeigern in bestimmten Situationen den bequemen Aufruf von Zeigermethoden für Nicht-Zeigerwerte. Es ist wichtig zu beachten, dass dieses Verhalten nur für Methoden mit Zeigerempfängern gilt.

Das obige ist der detaillierte Inhalt vonWarum kann ich in Go Zeigermethoden für Nicht-Zeigerwerte aufrufen?. 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