# section3switch文
switch文では、ある変数の値が何かという条件を「case」で始まる文で評価し、条件が満たされたときに特定の処理を行う。一度条件が満たされれば再び評価しない。条件が満たされなければ何もせずに終わる、などの性質を利用すると、便利な使い方ができる。
```go
package main
import "fmt"
func main() {
commands := []string{"O", "S", "O", "S", "E", "q"}
for i := 0; i < len(commands); i++ {
switch commands[i] {
case "N":
fmt.Printf("[%s]新規文書を作成します。\n", commands[i])
case "O":
fmt.Printf("[%s]開くファイルを指定してください。\n", commands[i])
case "S":
fmt.Printf("[%s]ファイルを保存しました。\n", commands[i])
case "Q":
fmt.Printf("[%s]終了します。よろしいですか。\n", commands[i])
default:
fmt.Printf("[%s]無効なコマンドです。\n", commands[i])
}
}
}
実行結果
[O]開くファイルを指定してください。
[S]ファイルを保存しました。
[O]開くファイルを指定してください。
[S]ファイルを保存しました。
[E]無効なコマンドです。
[q]無効なコマンドです。
```
# 式の値で場合分け
Go言語ではcase文で数値の大小関係を評価することが可能である。
```go
package main
import "fmt"
func main() {
age := []int{18, 22, 56, 39, 42, 62, 27}
gen := [3]int{}
dummy := true
for i := 0; i < len(age); i++ {
switch dummy {
case age[i] > 49:
gen[2]++
case age[i] > 29:
gen[1]++
default:
gen[0]++
}
}
fmt.Printf("%d名のうち:\n", len(age))
fmt.Printf("50代以上は%d名\n", gen[2])
fmt.Printf("30-40代は%d名\n", gen[1])
fmt.Printf("20代以下は%d名\n", gen[0])
}
```
switch文で評価する変数[dummy]には、ブール型の固定値[true]を代入しておく。これは<u>**trueという文字列**</u>を代入しているのではなく、今回においてはケースの評価を参照した際に[true]であった際に処理をする…という役割を与えている。
trueかfalseかで場合分けする方法はよく使われるため、dummyを省略して以下のように書くことも可能である。
```go
switch {
case age[i] >49:
case age[i] >29:
default:
}
```
###### tags:`1日で基本が身につくGo言語`