Maison >développement back-end >Golang >Comment plusieurs cas dans les commutateurs de type Go peuvent-ils conduire à un comportement inattendu ?
Cas multiples dans les commutateurs de type Go
Lors de l'attribution d'une valeur d'interface à une variable à commutation de type, le type résultant dépend de la liste de cas structure. Plusieurs listes de cas dans une instruction switch-case peuvent provoquer un comportement inattendu.
Dans l'extrait de code que vous avez fourni :
switch a := foo.(type){ case B, A: a.test() }
L'erreur se produit car le type de la variable a est interface{} , pas A ou B. En effet, la liste de cas contient plusieurs types, donc le type de a reste le même que le type de l'expression d'interface (foo).
Pour résoudre ce problème, la liste de cas ne doit contenir qu'un seul type :
switch a := foo.(type){ case A: a.test() }
En limitant la liste de cas à un type spécifique, la variable a aura le type attendu, permettant à l'appel de méthode de réussir.
Alternativement, vous pouvez affirmer explicitement le type d'interface à l'aide d'une expression d'assertion :
if a, ok := foo.(tester); ok { fmt.Println("foo has test() method") a.test() }
Dans ce cas, la variable a n'aura le type attendu que si l'assertion réussit (c'est-à-dire, ok c'est vrai).
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!