---
# System prepended metadata

title: section3switch文
tags: [1日で基本が身につくGo言語]

---

# 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言語`