Maison > développement back-end > Golang > Pourquoi l'assertion de type panique-t-elle lors de la conversion en un alias de type dans Go ?

Pourquoi l'assertion de type panique-t-elle lors de la conversion en un alias de type dans Go ?

Mary-Kate Olsen
Libérer: 2024-12-14 04:55:14
original
252 Les gens l'ont consulté

Why Does Type Assertion Panic When Casting to a Type Alias in Go?

Casting de type dans Go : Comprendre les assertions de type

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.

L'extrait de code

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
}
Copier après la connexion

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.

Pourquoi la 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.

Comprendre les assertions de type

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.

Existe-t-il un moyen propre de convertir une signature de fonction plus longue ?

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.

Conclusion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal