Maison > développement back-end > Golang > 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
Libérer: 2024-11-16 00:35:02
original
224 Les gens l'ont consulté

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

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

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!

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