型スイッチのフォールスルー: 許可されない理由
Go の型スイッチ ステートメントでは、"fallthrough" キーワードは禁止されています。公式ドキュメントでは、詳細な説明はなく、この制限について簡単に説明されています。この記事は、この制約の背後にある潜在的な理由を詳しく掘り下げることを目的としています。
問題を理解する
型スイッチでは、各 case ステートメントはインターフェース型の式を評価します。{}特定のタイプに。次に、式の値は、case ブロック内で使用するために指定された型にバインドされます。ただし、それぞれのケースに関連付けられている型が異なるため、フォールスルーは混乱を招く可能性があります。
次の例を考えてみましょう:
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 }
このシナリオでは、変数 i は、状況に応じて異なる型になります。どのようなケースに遭遇するか。フォールスルーが使用される場合、後続の case ステートメントは前の case と同じ型の変数を期待します。ただし、前のケースが bool でフォールスルーが使用されている場合、後続のケースでは string 型の値が発生し、型の不一致エラーが発生します。
考えられる理由
代替アプローチ
開発者が次の機能を必要とする場合型の切り替えでフォールスルーが発生した場合、同様の結果を達成する別のアプローチがあります。
switch i := x.(type) { case int, float64: fmt.Println(i) }
switch i := x.(type) { case bool: if i { fmt.Println("True") } }
以上がGo の type switch ステートメントではフォールスルーが許可されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。