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
Libérer: 2025-01-01 06:35:11
original
920 Les gens l'ont consulté

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

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

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

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!

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