Heim >Backend-Entwicklung >Golang >Warum erlaubt Go die Übergabe von „func(int)' an „func(interface{})' nicht, obwohl „int' „interface{}' erfüllt?
Typfunktion mit Schnittstellenparameter-Inkompatibilitätsfehler
In Go erscheint die Deklaration einer Typfunktion so, dass sie jeden Wert akzeptiert, der der Schnittstelle{} entspricht, unkompliziert. Der Aufruf einer als Argument übergebenen Funktion, die dieser Typspezifikation entspricht, löst jedoch einen Fehler aus.
Dieser Fehler ist auf das Konzept der Typvarianz zurückzuführen, insbesondere auf das Fehlen von Kovarianz in den Schnittstellen von Go. Während eine Ganzzahl (int) an eine Funktion übergeben werden kann, die interface{} erwartet, gilt das gleiche Prinzip nicht für Funktionen.
Insbesondere sind func(int) und func(interface{}) keine kompatiblen Typen . Obwohl int mit interface{} übereinstimmt, entspricht func(int) nicht func(interface{}). Dies liegt daran, dass Schnittstellen in Go invariant sind.
Um dieses Problem zu beheben, sollten Sie func(int) an eine Funktion übergeben, die Schnittstelle{} erwartet, wie im folgenden Beispiel gezeigt:
package main import "fmt" type myfunc interface{} func foo(x interface{}) { fmt.Println("foo", x) } func add2(n int) int { return n + 2 } func main() { foo(add2) }
In diesem Beispiel implementiert func(int)int interface{} und vermeidet so den Typinkompatibilitätsfehler.
Das obige ist der detaillierte Inhalt vonWarum erlaubt Go die Übergabe von „func(int)' an „func(interface{})' nicht, obwohl „int' „interface{}' erfüllt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!