Heim > Backend-Entwicklung > Golang > Können Go-Methoden basierend auf Argumenttypen überlastet werden?

Können Go-Methoden basierend auf Argumenttypen überlastet werden?

Susan Sarandon
Freigeben: 2024-12-22 16:08:13
Original
824 Leute haben es durchsucht

Can Go Methods Be Overloaded Based on Argument Types?

Methodenüberladung in Golang mit unterschiedlichen Typen

In Go ist es möglich, Methoden mit demselben Namen, aber unterschiedlichen Typen für ihre Empfänger zu definieren , was polymorphes Verhalten ermöglicht. Dies ist jedoch bei Argumenten nicht der Fall.

Bei Verwendung empfängerbasierter Methoden, wie im folgenden Codeausschnitt zu sehen ist:

type A struct {
  Name string
}

type B struct {
  Name string
}

func (a *A) Print() {
  fmt.Println(a.Name)
}

func (b *B) Print() {
  fmt.Println(b.Name)
}
Nach dem Login kopieren

Dies wird erfolgreich kompiliert und liefert beim Aufruf die gewünschte Ausgabe die Print-Methode für Instanzen von A und B. Wenn jedoch versucht wird, den Empfänger der Methode wie gezeigt auf die Argumente zu verschieben:

func Print(a *A) {
  fmt.Println(a.Name)
}

func Print(b *B) {
  fmt.Println(b.Name)
}
Nach dem Login kopieren

Dies führt zu ein Kompilierungsfehler:

./test.go:22: Print redeclared in this block
    previous declaration at ./test.go:18
./test.go:40: cannot use a (type *A) as type *B in function argument
Nach dem Login kopieren

Dies liegt daran, dass Go das Überladen von Funktionen basierend auf Argumenttypen nicht unterstützt. Dies bedeutet, dass Funktionen mit demselben Namen nicht mit unterschiedlichen Argumenttypen definiert werden können. Stattdessen ist es erforderlich, dass Funktionen eindeutige Namen haben oder Methoden verwenden, wenn Sie nur einen Parameter, den Empfänger, „überladen“ möchten.

Daher ist es zulässig, Methoden basierend auf dem Empfänger zu überladen, nicht jedoch auf dem Argumenttypen.

Das obige ist der detaillierte Inhalt vonKönnen Go-Methoden basierend auf Argumenttypen überlastet 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