Maison  >  Article  >  développement back-end  >  Pourquoi le Fallthrough est-il interdit dans les commutateurs de type Go ?

Pourquoi le Fallthrough est-il interdit dans les commutateurs de type Go ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-16 00:35:02157parcourir

Why is Fallthrough Prohibited in Go's Type Switches?

Interdiction de basculement dans les commutateurs de type :

Dans Go, l'instruction "fallthrough" est une construction de langage qui permet l'exécution de cas ultérieurs dans une instruction switch sans instruction break explicite. Cependant, le remplacement n'est pas autorisé dans les commutateurs de type.

Pourquoi est-ce le cas ?

Un commutateur de type détermine le type d'une expression et l'attribue à la variable spécifiée dans le cas du commutateur. Cette variable représente le type spécifique de l'expression à ce stade du commutateur.

Si la transition était autorisée, il y aurait un problème de non-concordance de type. Considérons l'extrait de code fourni :

//Empty interface
var x interface{}

//A int, float64, bool or string value
x = ...

switch i := x.(type) {
case int:
    fmt.Println(i + 1)
case float64:
    fmt.Println(i + 2.0)
case bool:
    fallthrough
case string:
    fmt.Printf("%v", i)
default:
    fmt.Println("Unknown type. Sorry!")
}

Dans le cas où bool est vrai, la variable i se voit attribuer la valeur de bool dans l'interface x. Si le repli était autorisé, l'exécution se poursuivrait jusqu'au cas de chaîne. Cependant, à ce stade, la variable i conserverait toujours la valeur booléenne. Cette incompatibilité de type entraînerait une erreur.

De plus, l'instruction fallthrough n'a pas de sens dans un changement de type car elle ne peut pas changer le type de la variable i. Les commutateurs de type sont destinés à affiner le type de l’expression à un type spécifique dans chaque cas. Autoriser le fallthrough irait à l'encontre de cet objectif.

Pour obtenir le comportement souhaité, on peut utiliser une instruction switch avec des conversions de type explicites dans chaque cas, comme indiqué ci-dessous :

switch i := x.(type) {
case bool, string:
    if b, ok := i.(bool); ok {
        fmt.Println(b) // value as bool
    } else {
        fmt.Printf("%v", i) // value as string
    }
default:
    fmt.Println("Unknown type. Sorry!")
}

En utilisant cette approche , on peut gérer une gamme de types dans une seule instruction switch sans avoir recours à une solution de secours.

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