switch文をGo言語のプログラムで確認しよう!

Go言語
この記事は約9分で読めます。
Go初学者
Go初学者

Go言語のswitch文の記述方法について知りたいな?

この記事ではGo言語のswitch文の基本を理解できます!
  • Go言語でのswitch文の書き方2種類
  • switch文の記述で注意したいこと

switch文はGo言語以外のプログラミング言語で使用されている制御構文です。

if文と同じ条件分岐で使用されます。

この記事では、Go言語でのswitch文の基本的なことを理解していきましょう。

Go言語のif文について理解が曖昧な方は、当ブログの記事を参考にしてみてください。

もりぴ
この記事を書いた人

XHTML1.0時代にHTML&CSSを勉強した経験あり。無趣味だった私が2020年5月からプログラミング学習を開始し現在も挫折せずに趣味で学習を楽しんでいる51歳。プログラミングの楽しさをブログを通してお伝えしていきます。

もりぴをフォローする

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つ目の casetrue (真)となり、「変数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文の中で変数宣言した変数は、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文では注意点があります。

case判定で列挙型(caseを , で区切った判定)と演算子を混在してはいけません!

// 注意点!列挙型と演算子を混在してはいけない!!
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(偽)の場合の処理
    }
}
Go言語のswitch文での注意点のまとめ!
  • Go言語では変数の型とcaseで判定する値の型は一緒でないといけない
  • switch文の中で変数宣言した変数は、switch文の外から参照できない
  • caseの判定で列挙型と演算子を混在してはいけない

switch文に関しては、ちょっとだけ難易度が高いことも覚えなければなりません。

Go言語入門編では、今回お伝えした基本的なことを理解できていればswitch文を使ってプログラムを書くことはできます。

まずは、Go言語の全体像を浅く広く理解していきましょう。

comment

タイトルとURLをコピーしました