Commutateur de type avec plusieurs cas dans Go
Lors de l'utilisation d'un commutateur de type avec plusieurs cas, on peut rencontrer une erreur indiquant qu'une variable dans un cas avec plusieurs types n'est pas défini. Ce comportement découle de la spécification du langage Go, qui stipule qu'un switch guard de type peut inclure une courte déclaration de variable.
Dans de tels cas, la variable a le même type que le type répertorié dans les cas à type unique. Cependant, dans les cas d'une liste de plusieurs types, la variable a le type de l'expression dans le type switch guard.
Pour illustrer cela, considérons le code suivant :
type A struct { a int } func (this *A) test() { fmt.Println(this) } type B struct { A } var foo interface{} foo = A{} switch a := foo.(type) { case B, A: a.test() }
En cours d'exécution ce code entraînera l'erreur "a.test non défini (le type interface {} est une interface sans méthode)." En effet, la variable a a le type interface{}, et non le type du cas spécifique.
Pour résoudre ce problème, on peut affirmer que l'expression de type switch guard a la méthode attendue. Par exemple :
type tester interface { test() } func main() { var foo interface{} foo = &B{} if a, ok := foo.(tester); ok { fmt.Println("foo has test() method") a.test() } }
Ce code vérifie d'abord si foo a la méthode test(), et si c'est le cas, il attribue la valeur de foo à a et appelle la méthode test().
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!