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

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

Susan Sarandon
Susan SarandonOriginal
2024-12-22 16:08:13765Durchsuche

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)
}

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!

Stellungnahme:
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