Heim >Backend-Entwicklung >Golang >Warum kann ich in Go kein „func(int)' an eine Funktion übergeben, die „func(interface{})' erwartet?
Typ func mit Schnittstellenparameter inkompatibel: Varianz verstehen
In Go stoße ich auf die Meldung „a (type func(int)) kann nicht verwendet werden als Der Fehler „type myfunc in argument to b“ beim Aufrufen einer Funktion mit einem Schnittstellenparameter kann verwirrend sein. Dieses Problem entsteht aufgrund des Varianzkonzepts in Typsystemen.
Gos Schnittstellen weisen keine Varianz auf, was bedeutet, dass sich eine Schnittstelle nicht kovariant verhält wie in einigen anderen Programmiersprachen. Wenn ein Typ }), obwohl int einer Schnittstelle {} zuweisbar ist. Diese Inkompatibilität ergibt sich aus der Tatsache, dass sich Schnittstellen in Go nicht kovariant verhalten.
Um dieses Problem zu beheben, können Sie func(int) an eine Funktion übergeben, die interface{} erwartet, wie im folgenden Beispiel gezeigt:
Dies funktioniert, weil func(int)int interface{} implementiert und den Typ effektiv zu einer allgemeineren Schnittstelle „erweitert“. Typ.package main import "fmt" func foo(x interface{}) { fmt.Println("foo", x) } func add2(n int) int { return n + 2 } func main() { foo(add2) }
Weitere Erläuterungen finden Sie im bereitgestellten Wikipedia-Artikel über Varianz und im verlinkten Blog-Beitrag, der die Varianz in verschiedenen Programmiersprachen untersucht, insbesondere solchen, die Vererbung unterstützen.
Das obige ist der detaillierte Inhalt vonWarum kann ich in Go kein „func(int)' an eine Funktion übergeben, die „func(interface{})' erwartet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!