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?
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:
Beispiel für einen Spielplatz hier .