Go 言語の switch 文
1. switch ステートメント
switch ステートメントを使用すると、多数のコードブロックの中から実行する1つを選択できます。
Go言語の switch ステートメントは、C、C++、Java、JavaScript、PHPなどの言語と似ていますが、大きな違いがあります。Goでは一致した case のみが実行されるため、各ブロックの末尾に break ステートメントを記述する必要がありません。
2. 単一ケースの switch シンタックス
基本的な構文は以下の通りです。
switch expression {
case x:
// コードブロック
case y:
// コードブロック
case z:
...
default:
// コードブロック
}3. 動作原理
switch 文は以下のステップで処理されます:
- エクスプレッション(式)が一度だけ評価されます。
switchエクスプレッションの値と、各caseの値が比較されます。- 値が一致(マッチ)した場合、関連付けられたコードブロックが実行されます。
defaultキーワードは任意(オプション)です。どのcaseにも一致しなかった場合に実行するコードを指定します。
4. 単一ケースの switch 実装例
以下の例では、曜日の数値を基に曜日の名前を算出しています。
package main
import ("fmt")
func main() {
day := 4
switch day {
case 1:
fmt.Println("月曜日")
case 2:
fmt.Println("火曜日")
case 3:
fmt.Println("水曜日")
case 4:
fmt.Println("木曜日")
case 5:
fmt.Println("金曜日")
case 6:
fmt.Println("土曜日")
case 7:
fmt.Println("日曜日")
}
}実行結果:
木曜日5. default キーワード
default キーワードを使用すると、どのケースにも一致しなかった場合に実行されるコードを定義できます。
package main
import ("fmt")
func main() {
day := 8
switch day {
case 1:
fmt.Println("月曜日")
case 2:
fmt.Println("火曜日")
case 3:
fmt.Println("水曜日")
case 4:
fmt.Println("木曜日")
case 5:
fmt.Println("金曜日")
case 6:
fmt.Println("土曜日")
case 7:
fmt.Println("日曜日")
default:
fmt.Println("有効な曜日ではありません")
}
}実行結果:
有効な曜日ではありません6. 型の一致に関する注意点
すべての case の値は、switch エクスプレッションと同じ**型(データタイプ)**である必要があります。型が異なる場合、コンパイラはエラーを発生させます。
6.1. エラーが発生する例
package main
import ("fmt")
func main() {
a := 3
switch a {
case 1:
fmt.Println("aは1です")
case "b":
fmt.Println("aはbです")
}
}実行結果:
./prog.go:11:2: cannot use "b" (type untyped string) as type int