C 言語やJavaなどの他の言語と比較して、Go 言語のスイッチ構造は使用がより柔軟であり、構文設計は可能な限り便利です。
基本的な書き方
Go 言語は switch の文法設計を改善しました。case は独立したコード ブロックです。次の行への実行を避けるために、break ステートメントを使用して現在の case コード ブロックからジャンプする必要はありません。サンプル コードは次のとおりです:
var a = "hello"
switch a {
case "hello":
fmt.Println(1)
case "world":
fmt.Println(2)
default:
fmt.Println(0)
}
コード出力は次のとおりです。
1
上記の例では、それぞれのケースは文字列形式でデフォルト ブランチを使用していますが、Go 言語では、各スイッチがデフォルト ブランチを 1 つだけ持つことができると規定されています。
1) 1 分岐の多値
複数のケースをまとめる場合は、次のように記述できます。
var a = "mum"
switch a {
case "mum", "daddy":
fmt.Println("family")
}
異なる case 式はカンマで区切られます。
2) 分岐式
case の後には、定数だけでなく if などの式も追加できます。コードは次のとおりです。
var r int = 11
switch {
case r > 10 && r < 20:
fmt.Println(r)
}
この場合、スイッチの後に判定変数を続ける必要がないことに注意してください。
ケース間のフォールスルー – C 言語と互換性のあるケース設計
Go 言語では、ケースは独立したコードブロックであり、C 言語のように実行後すぐに次のケースが実行されるわけではありませんが、一部の移植コードとの互換性を考慮して、この機能を実現するために fallthrough キーワードが追加されています。コードは次のとおりです。
var s = "hello"
switch {
case s == "hello":
fmt.Println("こんにちは")
fallthrough
case s != "world":
fmt.Println("世界")
}
コード出力は次のとおりです。
こんにちは
世界
新しく書かれたコードの場合、フォールスルーは推奨されません。