Implementierung von Generika in Schnittstellenmethoden
Gos jüngste Einführung von Generika hat neue Möglichkeiten für die Erstellung generischer Datenstrukturen und Algorithmen eröffnet. Ein häufiger Anwendungsfall ist die Definition generischer Iteratorschnittstellen. Das Definieren solcher Schnittstellen kann jedoch zu Fehlern führen.
Fehler: Funktionstyp kann keine Typparameter haben
Beim Versuch, eine Iteratorschnittstelle mit einer generischen Methode ForEachRemaining zu definieren, werden Sie Möglicherweise tritt der folgende Fehler auf:
function type cannot have type parameters
Dieser Fehler tritt auf, weil Methoden in Go keinen eigenen Typ haben können Parameter.
Fehler: Methoden können keine Typparameter haben
Alternativ können Sie versuchen, den Typparameter in die Methodensignatur zu verschieben, aber dies führt zu einem anderen Fehler:
methods cannot have type parameters
Lösung: Generische Schnittstelle mit Typ Parameter
Um dieses Problem zu beheben, muss der Typparameter auf der Schnittstelle selbst angegeben werden. Hier ist ein aktualisiertes Codebeispiel:
type Iterator[T any] interface { ForEachRemaining(action func(T) error) error // other methods }
Diese Syntax gibt an, dass die Iterator-Schnittstelle in Bezug auf Typ T generisch ist und alle Methoden innerhalb der Schnittstelle T als Typparameter verwenden können.
Beispielverwendung
Hier ist ein Beispiel, das das Korrigierte zeigt Code:
import "fmt" type Iterator[T any] interface { ForEachRemaining(action func(T) error) error } func main() { fmt.Println("This program compiles successfully") }
Durch die Deklaration der Schnittstelle mit einem Typparameter können Sie Generika effektiv in Schnittstellenmethoden nutzen.
Das obige ist der detaillierte Inhalt vonWie implementiert man Generics korrekt in Go-Schnittstellenmethoden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!