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!