型スイッチのフォールスルー: 詳細な説明
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 }
このアプローチにより、型の不一致や曖昧さを招くことなく、さまざまな型をより具体的に処理できるようになります。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3