【go言語】条件分岐の基本 switch文

2020年5月4日

switch文は一つの変数から条件分岐の判定を行いたいときに使用できます。

go言語はc言語と同じようにswitch文が使用できますがいくつか特徴があります。
 ・case の条件を複数指定できる。
 ・c言語のようにbreakは無く、通常は次のcaseは実行しない。
 ・次のcaseを跨ぐようにするにはfallthroughを使用します。
 ・case内で条件を判定できる。
 ・文字列を使用できる。

switch文の基本形

ソースコード

package main

import "fmt"

func main() {
    /* switch文 */
    for i := 0; i <= 6 ; i++ {
        switch( i ) {
            case 1,3:
                fmt.Println( i,"は1か3です")
            case 2 :
                fmt.Println( i,"は2です")
            case 4 :
                fallthrough
            case 5 :
                fmt.Println( i,"は4か5です")
            default:
                fmt.Println( i,"は0~5以外")
        }
    }
}

9行目 :「case 1,3」は複数条件を指定しています。iが1か3の時に実行されます。
14行目:fallthroughを使用しています。iが4の時はスルーされて「case 5」の処理を行います。

実行結果

0 は0~5以外
1 は1か3です
2 は2です   
3 は1か3です
4 は4か5です
5 は4か5です
6 は0~5以外

switch内で条件判定を行う

switch内で比較を行い、case文で判定を行うことができます。

package main

import "fmt"

func main() {
    /* switch文 */
    for i := 0; i <= 6 ; i++ {
        switch( i >= 3 ) {
            case true:
                fmt.Println( i , "は3以上" )
            case false:
                fmt.Println( i , "は3未満" )
            default:
                fmt.Println( i , "はそれ以外" )
        }
    }
}
0 は0~5以外
1 は1か3です
2 は2です   
3 は1か3です
4 は4か5です
5 は4か5です
6 は0~5以外

case内で条件判定を行う

package main

import "fmt"

func main() {
    /* switch文 */
    for i := 0; i <= 6 ; i++ {
        switch {
            case i >= 5:
                fmt.Println( i,"は5以上です")
            case i >= 3:
                fmt.Println( i,"は3以上です")
            case i >= 1:
                fmt.Println( i,"は1以上です")
            default:
                fmt.Println( i,"は1未満です")
        }
    }
}
0 は1未満です
1 は1以上です
2 は1以上です
3 は3以上です
4 は3以上です
5 は5以上です
6 は5以上です

文字列をswitch文で判定する

c言語と違いswitchで文字列を判定することができます。
月から春夏秋冬を判定します。

package main

import "fmt"

func main() {
    /* switch文 */
    month := []string{"1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月","13月"}

    for i := 0; i < 13 ; i++ {
        switch month[i]{
            case "3月","4月","5月":
                fmt.Println( month[i] , "は春" )
            case "6月","7月","8月":
                fmt.Println( month[i] , "は夏" )
            case "9月","10月","11月":
                fmt.Println( month[i] , "は秋" )
            case "12月","1月","2月":
                fmt.Println( month[i] , "は冬" )
            default:
                fmt.Println( month[i] , "は分類できません" )
        }
    }
}
1月 は冬              
2月 は冬              
3月 は春              
4月 は春              
5月 は春              
6月 は夏              
7月 は夏              
8月 は夏              
9月 は秋              
10月 は秋             
11月 は秋             
12月 は冬             
13月 は分類できません