Type func avec erreur d'incompatibilité des paramètres d'interface
Dans Go, déclarer une fonction de type pour accepter toute valeur conforme à interface{} semble simple. Cependant, invoquer une fonction passée en argument qui adhère à cette spécification de type génère une erreur.
Cette erreur découle du concept de variance de type, en particulier du manque de covariance dans les interfaces de Go. Bien qu'un entier (int) puisse être transmis à une fonction attendant une interface{}, le même principe ne s'applique pas aux fonctions.
Plus précisément, func(int) et func(interface{}) ne sont pas des types compatibles. . Même si int est conforme à interface{}, func(int) n'est pas conforme à func(interface{}). En effet, les interfaces dans Go sont invariantes.
Pour résoudre ce problème, envisagez de passer func(int) à une fonction attendant une interface{}, comme démontré dans l'exemple suivant :
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) }
Dans cet exemple, func(int)int implémente interface{}, évitant ainsi l'erreur d'incompatibilité de type.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!