Heim > Backend-Entwicklung > Golang > Wie geht Go mit Methoden und Zeigern um, wenn der Empfängertyp und der Werttyp nicht übereinstimmen?

Wie geht Go mit Methoden und Zeigern um, wenn der Empfängertyp und der Werttyp nicht übereinstimmen?

Barbara Streisand
Freigeben: 2024-11-09 04:08:01
Original
508 Leute haben es durchsucht

How does Go handle methods and pointers when the receiver type and the value type don't match?

Zeiger in Golang: Eine umfassende Erklärung

In der Tour of Go wird erwähnt, dass Zeiger verwendet werden, um Methoden auf Werte zu implementieren. Was passiert jedoch, wenn wir eine Methode mit einem Nicht-Zeiger-Empfänger deklarieren, aber versuchen, sie auf einen Zeigerwert zu verwenden, oder umgekehrt?

Die Antwort liegt in zwei Grundregeln der Go-Sprache:

Methodenableitung:
Go ermöglicht die Ableitung von Methoden aus vorhandenen Methoden. In Ihrem Beispiel wird die Methode func (v Vertex) Abs() float64 von der Methode func (v *Vertex) Abs() float64 abgeleitet. Dies bedeutet, dass beim Deklarieren der vorherigen Methode automatisch eine neue Implementierung generiert wird, die im Wesentlichen die ursprüngliche Methode mit einem Zeiger auf den Empfänger aufruft:

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) } // Automatically generated
Nach dem Login kopieren

Daher unabhängig davon, ob Sie func (v *) deklarieren Vertex) Abs() oder func (v Vertex) Abs(), in beiden Fällen wird die generierte Methode aufgerufen.

Automatische Adresse Annahme:
Go kann automatisch einen Zeiger auf eine Variable generieren. Im folgenden Fall wird der Ausdruck v.Abs() in den Code aufgelöst:

vp := &v
vp.Abs()
Nach dem Login kopieren

Das bedeutet, dass, wenn Sie einen Wert an eine Methode übergeben, die einen Zeiger erwartet, und Go die Methode nicht automatisch von einem ableiten kann Wenn vorhanden, generiert der Compiler einen Zeiger auf den Wert und ruft dann die Methode für den Zeiger auf.

Zusammenfassend befolgt Go diese Regeln für die Verarbeitung von Zeigern und Methoden:

  • Methoden mit Nicht-Zeiger-Empfängern können von Methoden mit Zeiger-Empfängern abgeleitet werden, und die abgeleitete Methode ruft die ursprüngliche Methode mit einem Zeiger auf den Empfänger auf.
  • Wenn Go Eine Methode kann nicht automatisch von einer vorhandenen Methode abgeleitet werden. Sie generiert einen Zeiger auf den Wert und ruft die Methode auf dem Zeiger auf.

Das obige ist der detaillierte Inhalt vonWie geht Go mit Methoden und Zeigern um, wenn der Empfängertyp und der Werttyp nicht übereinstimmen?. 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