型スイッチのフォールスルー: 詳細な説明
Go の型スイッチにより、具体的な型に基づいて値を効率的に処理できます。ただし、標準の switch-case ステートメントとは異なり、型の切り替えではフォールスルーは明示的に禁止されています。この設計選択には、その理論的根拠について疑問が生じます。
理由を理解する
Go 仕様では、型の切り替えでは「フォールスルー」は許可されないと述べています。この禁止事項は、次のようないくつかの要因から生じています。
説明のための例
説明するためこの問題については、次のコードを検討してください:
switch i := x.(type) { case int: fmt.Printf("%T\n", i) // prints "int" case bool: fmt.Printf("%T\n", i) // prints "bool" fallthrough case string: fmt.Printf("%T\n", i) }
フォールスルーが許可された場合、どのようなタイプが許可されるかは不明です。文字列の場合に出力されます。ブール値のままにするべきか、ブール値と文字列の両方を含むインターフェースになるべきかは曖昧です。
代替ソリューション
フォールスルーは許可されていません。{}型スイッチの場合、同様の動作を実現する別の方法があります。
switch i := x.(type) { case bool, string: if b, ok := i.(bool); ok { // b is a bool } // i is an interface{} that contains either a bool or a string }
このアプローチでは、さまざまな型をより具体的に処理できます。型の不一致や曖昧さが生じます。
以上がGo のタイプスイッチでフォールスルーが禁止されているのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。