Type de fonction avec paramètre d'interface : erreur de variance expliquée
Dans Go, une tentative d'invocation d'une fonction passée en argument à une autre fonction attend un type interface{} peut entraîner une erreur « impossible d'utiliser a (type func(int)) comme type myfunc dans l'argument de b ». Cette erreur survient en raison du manque de prise en charge de la variance dans les interfaces Go.
Variance
La variance fait référence à la capacité d'un sous-type à être utilisé partout où son surtype est attendu. Dans un système de types covariants, les sous-types peuvent remplacer les supertypes dans les positions d'entrée et de sortie. La contravariance, en revanche, permet aux supertypes de remplacer les sous-types dans les positions d'entrée.
Interfaces Go
Les interfaces Go ne présentent pas de variance. Cela signifie que même si un int peut être transmis à une fonction attendant une interface{}, il n'en va pas de même pour func(int) et func(interface{}).
Comprendre l'erreur
Dans l'exemple fourni, func(int)int n'implémente pas func(interface{})int parce que :
Solution
Pour résoudre l'erreur, vous pouvez transmettre func(int) dans une fonction attendant une interface{}, comme indiqué dans le code suivant :
package main import "fmt" func foo(x interface{}) { fmt.Println("foo", x) } func add2(n int) int { return n + 2 } func main() { foo(add2) }
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!