Maison >développement back-end >Golang >Comment plusieurs cas dans les commutateurs de type Go peuvent-ils conduire à un comportement inattendu ?

Comment plusieurs cas dans les commutateurs de type Go peuvent-ils conduire à un comportement inattendu ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-01 06:35:11906parcourir

How Can Multiple Cases in Go Type Switches Lead to Unexpected Behavior?

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!

Déclaration:
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