Golang-Methoden mit demselben Namen und derselben Arity, aber unterschiedlichen Typen

8

Der folgende Code funktioniert einwandfrei. Zwei Methoden, die auf zwei verschiedenen Strukturen arbeiten und ein Feld der Struktur ausgeben:

%Vor%

Zeigt die gewünschte Ausgabe in der Konsole an:

%Vor%

Jetzt , wenn ich die Methodensignatur folgendermaßen ändere, bekomme ich einen Kompilierungsfehler. Ich bewege den Empfänger der Methode einfach zu den Argumenten der Methode:

%Vor%

Ich kann das Programm nicht einmal kompilieren:

%Vor%

Frage : Warum kann ich Strukturtypen im Empfänger austauschen, aber nicht im Argumente, wenn die Methoden denselben Namen und dieselbe Bedeutung haben?

    
Kiril 15.05.2014, 14:55
quelle

2 Antworten

23

Weil Go das Überladen von benutzerdefinierten Funktionen für ihre Argumenttypen nicht unterstützt.

Sie können Polymorphie nur durch Methoden, Schalter, Schalter und Kanäle erreichen.

    
rightfold 15.05.2014, 14:57
quelle
0

Sie können Typ-Introspektion verwenden. In der Regel sollte jedoch jede Verwendung des generischen Typs interface{} vermieden werden, es sei denn, Sie schreiben ein großes generisches Framework.

Das sagte, ein paar Möglichkeiten, die sprichwörtliche Katze zu häuten:

Beide Methoden gehen davon aus, dass für beide Typen ( *A und *B ) eine Print () -Methode definiert ist

Methode 1:

%Vor%

Methode 2:

%Vor%

Wenn es nicht wünschenswert ist, für jeden Typ eine Print() Methode zu haben, definieren Sie die Ziele PrintA(*A) und PrintB(*B) Funktionen und ändern Sie Methode 1 wie folgt:

%Vor%

Beispiel für einen Spielplatz hier .

    
colminator 26.03.2018 15:47
quelle

Tags und Links