Heim >Backend-Entwicklung >Golang >Können Go-Methoden basierend auf Argumenttypen überlastet werden?
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) }
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) }
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
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!