
Go言語のswitch文の記述方法について知りたいな?
switch文はGo言語以外のプログラミング言語で使用されている制御構文です。
if文と同じ条件分岐で使用されます。
この記事では、Go言語でのswitch文の基本的なことを理解していきましょう。
Go言語のif文について理解が曖昧な方は、当ブログの記事を参考にしてみてください。
Go言語でのswitch文の書き方2種類
Go言語ではswitch文の書き方が2種類あります。
それぞれをプログラムのコードで確認しながら、注意点も合わせてお伝えしていきます。
基本的なswitch文の書き方(列挙型)
基本的なswitch文の構成を確認していきましょう。
// Go言語の基本的なswitch文の構成
package main
func main() {
var 変数名 型 = 値
// 変数名 := 値でもOK!
switch 変数名 {
case 条件式:
// 条件がtrue(真)の場合の処理
default:
// 条件がfalse(偽)の場合の処理
}
}
case 条件式
の部分は、if文の else if 同様に複数でも大丈夫です。
default
は省略しても構いません。

他のプログラミング言語では break が必要ですが、Go言語はいりません。
それでは、プログラムで具体例を見てみましょう。
// switch文の基本
package main
import "fmt"
func main() {
var num int = 3
// 列挙型
switch num {
case 1, 2:
fmt.Println("変数numは1か2です。")
case 3, 4:
fmt.Println("変数numは3か4です。")
default:
fmt.Println("なんの数字なのかわかりません。")
}
}
// 出力結果
$ go run main.go
変数numは3か4です。
変数num
の値が 3
なので、2つ目の case
で true
(真)となり、「変数numは3か4です。」が出力されていることが確認できます。
case
で判定する値は複数記述でき , で区切ります。
if文同様に、ひとつの処理が終了するとswitch文から抜けます。
switch文の注意点1
Go言語は静的型付け言語なので、変数の型とcaseで判定する値の型は一緒でないといけません。
// switch文の注意点
package main
import "fmt"
func main() {
// わかりやすく変数をstring型で宣言
var num string = "morip"
// 列挙型
switch num {
case 1, 2:
fmt.Println("変数numは1か2です。")
case 3, 4:
fmt.Println("変数numは3か4です。")
default:
fmt.Println("なんの数字なのかわかりません。")
}
}
// 出力結果
$ go run main.go
# command-line-arguments
./main.go:12:2: cannot use 1 (type untyped int) as type string
./main.go:12:2: cannot use 2 (type untyped int) as type string
./main.go:14:2: cannot use 3 (type untyped int) as type string
./main.go:14:2: cannot use 4 (type untyped int) as type string
「case判定はstringにしなさいint型ではダメ!」というエラーになります。
switch文の中で変数宣言する書き方
Go言語ではswitch文の中に変数宣言する書き方もあるのでご紹介します。
// switch文の中で変数宣言する
package main
import "fmt"
func main() {
switch num2 := 2; num2 {
case 1, 2:
fmt.Println("変数numは1か2です。")
case 3, 4:
fmt.Println("変数numは3か4です。")
default:
fmt.Println("なんの数字なのかわかりません。")
}
}
// 出力結果
$ go run main.go
変数nは1か2です。
基本的なswitch文と同様な出力結果が得られました。
ただし、switch文の中で変数宣言する書き方で注意しなければいけないことがあります。

では、確認してみましょう。
// switch文の中で変数宣言する際の注意点
package main
import "fmt"
func main() {
switch num2 := 2; num2 {
case 1, 2:
fmt.Println("変数numは1か2です。")
case 3, 4:
fmt.Println("変数numは3か4です。")
default:
fmt.Println("なんの数字なのかわかりません。")
}
// 変数num2を参照してみる
fmt.Println(num2)
}
// 出力結果
$ go run main.go
# command-line-arguments
./main.go:29:14: undefined: num2
「変数num2は未定義です」というエラーになります。
演算子を用いたswitch文
Go言語のswitch文では、caseの判定に演算子を用いることができます。
ここでは、論理演算子を用いたプログラム例を確認していきましょう。
// 演算子を用いたswitch文
package main
import "fmt"
func main() {
// 論理演算子を用いたswitch文
var num3 int = 6
switch {
case num3 > 0 && num3 < 4:
fmt.Println("変数num3は0より大きく、4より小さい")
case num3 > 3 && num3 < 10:
fmt.Println("変数num3は3より大きく、10より小さい")
default:
fmt.Println("わかりません。")
}
}
// 出力結果
$ go run main.go
変数n3は3より大きく、10より小さい

case判定で使用している論理演算子は理解できていますか?
if文やswitch文では演算子を多く使用されます。
演算子の理解に自信が無い方は、当ブログの記事を参考にしていただければ嬉しいです!
演算子を用いたswitch文での注意点
演算子を用いたswitch文では注意点があります。
// 注意点!列挙型と演算子を混在してはいけない!!
package main
import "fmt"
func main() {
// 論理演算子を用いたswitch文
var num3 int = 6
switch {
case 1, 2, 3, 4:
fmt.Println("変数num3は1,2,3,4のどれかです")
case num3 > 3 && num3 < 10:
fmt.Println("変数num3は3より大きく、10より小さい")
default:
fmt.Println("わかりません。")
}
}
// 出力結果
$ go run main.go
# command-line-arguments
./main.go:33:2: cannot use 1 (type untyped int) as type bool
./main.go:33:2: cannot use 2 (type untyped int) as type bool
./main.go:33:2: cannot use 3 (type untyped int) as type bool
./main.go:33:2: cannot use 4 (type untyped int) as type bool
「case判定はboolにしなさいint型ではダメ!」というエラーになります。
switch文を利用する時は、列挙型か演算子を使用するか統一する必要があります。
【まとめ】Go言語のswitch文の基本
今回はGo言語のswitch文の基本についてお伝えしてきました。
それでは、まとめに入りましょう。
Go言語のswitch文の基本的な書き方の構成
// Go言語の基本的なswitch文の構成
package main
func main() {
var 変数名 型 = 値
// 変数名 := 値でもOK!
switch 変数名 {
case 条件式:
// 条件がtrue(真)の場合の処理
default:
// 条件がfalse(偽)の場合の処理
}
}
switch文の中で変数宣言する書き方の構成
// switch文の中で変数宣言する書き方の構成
package main
func main() {
switch 変数名 := 値; 変数名 {
case 条件式:
// 条件がtrue(真)の場合の処理
default:
// 条件がfalse(偽)の場合の処理
}
}
switch文に関しては、ちょっとだけ難易度が高いことも覚えなければなりません。
Go言語入門編では、今回お伝えした基本的なことを理解できていればswitch文を使ってプログラムを書くことはできます。
まずは、Go言語の全体像を浅く広く理解していきましょう。
comment