Typparameter in Schnittstellenmethoden verwenden
Beim Versuch, eine generische Datenstruktur in Go zu implementieren, ist beim Definieren einer Iteratorschnittstelle ein Fehler aufgetreten mit einer Methode, die einen Typparameter annimmt. Dieser Artikel befasst sich mit dem Problem und bietet eine Lösung.
Fehler bei der Schnittstellendefinition
Der ursprüngliche Code definiert eine Schnittstelle mit einer Methode, die einen Funktionstypparameter annimmt, was dazu führte der Fehler: „Funktionstyp darf keine Typparameter haben.“ Ebenso führte das Verschieben des Typparameters zur Methode zu dem Fehler: „Methoden können keine Typparameter haben.“
Lösung: Generische Schnittstellendefinition
Wie durch den Fehler vorgeschlagen , Methoden können keine dedizierten Typparameter haben. Stattdessen besteht die Lösung darin, den Typparameter am Schnittstellentyp selbst anzugeben. Dadurch können Sie den Typparameter in Methoden innerhalb des Schnittstellenkörpers verwenden.
Der korrigierte Code:
type Iterator[T any] interface { ForEachRemaining(action func(T) error) error // other methods }
Da der Typparameter für den Schnittstellentyp definiert ist, können Sie ihn jetzt verwenden die Methode wie erwartet:
type MyIterator[T any] struct { // implementation of the iterator } func (i *MyIterator[T]) ForEachRemaining(action func(T) error) error { // implementation of the ForEachRemaining method using T return nil }
Beispielverwendung
Das folgende Beispiel demonstriert die Verwendung der generischen Iteratorschnittstelle:
package main import ( "fmt" "collection" ) type MyIterator[T any] struct { // implementation of the iterator } func (i *MyIterator[T]) ForEachRemaining(action func(T) error) error { // implementation of the ForEachRemaining method using T return nil } func main() { myIterator := &MyIterator[int]{} _ = myIterator.ForEachRemaining(func(num int) error { fmt.Println(num) return nil }) }
Dieser Code definiert einen generischen Iterator, MyIterator, und verwendet ihn, um über ein Segment von Ganzzahlen zu iterieren und jeden Wert auszugeben.
Das obige ist der detaillierte Inhalt vonWie kann ich Typparameter in Go-Schnittstellenmethoden verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!