Go/switch
表示
< Go
Goにおける switch キーワードは、複数の条件に基づいて異なる処理を実行するための制御フロー文です。他の多くのプログラミング言語の switch 文と似ていますが、Go の switch にはいくつかの特徴的な点があります。
基本的な switch 文の構文は以下の通りです。
switch expression { case value1: // expression が value1 と等しい場合に実行されるコード case value2: // expression が value2 と等しい場合に実行されるコード // ... 他の case default: // どの case にも一致しない場合に実行されるコード (省略可能) }
switchの後に続くexpressionが評価されます。- 評価された値は、各
caseのvalueと上から順に比較されます。 - 最初に一致した
caseのブロック内のコードが実行されます。 - Go の
switch文では、一致したcaseの処理が完了すると、自動的にswitch文から抜け出します。 明示的にbreakを記述する必要はありません(記述しても問題ありません)。 - どの
caseにも一致しない場合、defaultケースが存在すれば、そのブロック内のコードが実行されます。defaultケースは省略可能です。
breakの暗黙的な実行: 他の言語とは異なり、Go のswitchでは、一致したcaseの処理が終わると自動的にswitch文から抜け出します。意図的に次のcaseの処理を実行したい場合は、fallthroughキーワードを使用します。
package main import "fmt" func main() { num := 2 switch num { case 1: fmt.Println("1 です") case 2: fmt.Println("2 です") fallthrough // 次の case の処理も実行する case 3: fmt.Println("3 です") default: fmt.Println("その他") } }
この例の出力は以下のようになります。
2 です 3 です
package main import "fmt" func printType(i interface{}) { switch v := i.(type) { case int: fmt.Printf("%v は int 型です\n", v) case string: fmt.Printf("%v は string 型です\n", v) default: fmt.Printf("%v は不明な型です\n", v) } } func main() { printType(10) printType("hello") printType(true) }
この例では、i.(type)によってiの型が評価され、それぞれの型に対応するcaseの処理が実行されます。
- タグなし
switch(Tagless Switch):switchの後に式を書かずに、各caseで個別の条件を記述することができます。これは、一連のif-else if-...-else文をより簡潔に記述するのに便利です。
package main import "fmt" func main() { age := 25 switch { case age < 18: fmt.Println("未成年") case age >= 18 && age < 65: fmt.Println("成人") case age >= 65: fmt.Println("高齢者") } }
この例では、それぞれのcaseが真偽値を評価する条件式となっています。最初にtrueと評価されたcaseの処理が実行されます。
package main import "fmt" func main() { day := "土" switch day { case "月", "火", "水", "木", "金": fmt.Println("平日") case "土", "日": fmt.Println("週末") default: fmt.Println("不明な曜日") } }
まとめ
[編集]Go の switch キーワードは、複数の条件分岐を効率的に記述するための強力なツールです。暗黙的な break、fallthrough による意図的な次のケースへのフォールスルー、型スイッチによる型の判別、タグなし switch による複雑な条件分岐、そして複数の値を指定できる case など、多様な機能を提供します。これらの特徴を理解することで、より簡潔で可読性の高い Go のコードを書くことができます。