Fallthrough dans les commutateurs de type : pourquoi ce n'est pas autorisé
Dans l'instruction de changement de type de Go, le mot-clé "fallthrough" est interdit. La documentation officielle énonce brièvement cette restriction sans fournir d'explication approfondie. Cet article vise à approfondir les raisons potentielles de cette contrainte.
Comprendre le problème
Dans un changement de type, chaque instruction case évalue une expression de type interface{} à un type spécifique. La valeur de l'expression est ensuite liée au type spécifié pour être utilisée dans le bloc case. Cependant, les échecs peuvent prêter à confusion en raison des différents types associés à chaque cas.
Considérons l'exemple suivant :
var x interface{} x = bool(true) switch i := x.(type) { case int: fmt.Println(i + 1) // Error: cannot use bool as int case float64: fmt.Println(i + 2.0) // Error: cannot use bool as float64 case bool: fallthrough case string: fmt.Printf("%v", i) // Error: cannot use bool as string }
Dans ce scénario, la variable i aurait un type différent en fonction sur quel cas est rencontré. Lorsque le fallthrough est utilisé, l'instruction case suivante s'attendra à une variable du même type que le cas précédent. Cependant, si le cas précédent était booléen et que fallthrough est utilisé, le cas suivant rencontrerait une valeur de type chaîne, entraînant des erreurs d'incompatibilité de type.
Raisons possibles
Approches alternatives
Si un développeur a besoin des fonctionnalités de fallthrough dans un changement de type, il existe des approches alternatives pour obtenir des résultats similaires :
switch i := x.(type) { case int, float64: fmt.Println(i) }
switch i := x.(type) { case bool: if i { fmt.Println("True") } }
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!