„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie geht Go mit Zeiger- und Wertempfängern in Methoden um?

Wie geht Go mit Zeiger- und Wertempfängern in Methoden um?

Veröffentlicht am 16.11.2024
Durchsuche:901

How Does Go Handle Pointer and Value Receivers in Methods?

Go-Zeiger: Empfänger- und Werttypen

In Go sind Zeiger unverzichtbar für das Verständnis der objektorientierten Programmierung und Speicherverwaltung. Beim Umgang mit Zeigern ist es wichtig, den Unterschied zwischen Empfängertypen in Methoden zu verstehen.

Das von Ihnen bereitgestellte Go Tour-Beispiel veranschaulicht dieses Konzept:

type Vertex struct {
    X, Y float64
}

func (v *Vertex) Abs() float64 {
    return math.Sqrt(v.X*v.X   v.Y*v.Y)
}

func main() {
    v := &Vertex{3, 4}
    fmt.Println(v.Abs())
}

Hier erhält die Abs-Methode einen Zeigerempfänger (*Vertex). Sie haben jedoch bemerkt, dass Sie auch einen Wertempfänger (Vertex) verwenden und das gleiche Ergebnis erhalten könnten. Wie ist das möglich?

Empfänger- und Werttypen

Go erlaubt abgeleitete Methoden. Eine Methode mit einem Zeigerempfänger kann von einer Methode mit einem Wertempfänger erben. Das bedeutet, dass eine Wertempfängermethode, z. B. func (v Vertex) Abs() float64, automatisch eine Zeigerempfängermethode generiert:

func (v Vertex) Abs() float64 { return math.Sqrt(v.X*v.X v.Y*v.Y) }
func (v *Vertex) Abs() float64 { return Vertex.Abs(*v) }  // GENERATED METHOD

Automatische Adresserfassung

Eine weitere wichtige Funktion ist Go's Automatische Adresserfassung. Betrachten Sie den folgenden Code ohne einen expliziten Zeigerempfänger:

func (v *Vertex) Abs() float64 { return math.Sqrt(v.X*v.X v.Y*v.Y) }
func main() {
    v := Vertex{3, 4}
    v.Abs()
}

Go übernimmt implizit die Adresse des an die Abs-Methode übergebenen Werts. Dies entspricht dem Folgenden:

vp := &v
vp.Abs()

Fazit

In Go ist das Verständnis der Rolle von Empfängertypen und der automatischen Adresserfassungsfunktion für eine effiziente Zeigernutzung von entscheidender Bedeutung. Sie können Zeigerempfängermethoden von Wertempfängermethoden ableiten, und Go übergibt automatisch die Adresse von Werten, ohne explizit Zeiger zu verwenden.

Neuestes Tutorial Mehr>

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