Dans Go, le cast est utilisé pour convertir une valeur en un type de données différent. Cependant, lorsqu'il s'agit d'alias de type, une approche légèrement différente est requise, comme démontré ci-dessous.
Considérez le code suivant :
type somethingFuncy func(int) bool func funcy(i int) bool { return i%2 == 0 } var a interface{} = funcy func main() { _ = a.(func(int) bool) // Works _ = a.(somethingFuncy) // Panics }
Ici, la première assertion de type (_ = a.(func(int) bool)) convertit avec succès la valeur de a en type de fonction func(int) bool. Cependant, la deuxième assertion (_ = a.(somethingFuncy)) échoue avec une panique.
La raison de la panique réside dans la nature des assertions de type dans Go. Pour les assertions de type, seul le type réel de la valeur compte. Dans ce cas, le type de a est interface{}, à qui est attribuée la valeur de la fonction funcy. Cependant, SomethingFuncy est un alias de type distinct, bien qu'il partage la même signature de fonction que func(int) bool.
Dans Go, les assertions de type déterminent si une valeur correspond à un alias de type spécifique. tapez et, si c’est le cas, extrayez la valeur sous-jacente. La syntaxe est x.(T), où x est la valeur et T est le type cible. La clé ici est que le type de cible doit correspondre au type exact de x, sans aucun alias.
Malheureusement, il n'y a pas moyen direct de convertir en une signature de fonction plus longue à l'aide d'assertions de type. En effet, les assertions de type ne prennent en compte que le type exact de la valeur, et non sa compatibilité avec d'autres types.
Bien que la conversion de type soit essentielle dans Go pour convertir des valeurs entre différents types de données, elle est Il est important de comprendre les limites liées aux alias de type. Les assertions de type reposent sur des correspondances de type exactes, et tenter d'affirmer une valeur pour une signature de fonction plus longue entraînera souvent une panique.
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!