Golang switchの「穴」を覚えています

3073 ワード

switchブランチ文は各プログラミング言語でよく使われており、条件に応じて1つ以上のcase文を選択して実行することができ、C、C++言語プログラミングに慣れていることはよく知られており、C、C++ではswitchブランチ判断条件が各caseを順次遍歴し、条件に合致するcaseに遭遇すると、そのcase中の文が実行され、caseに表示されるbreak文に遭遇するまでswitchプロセスは終了しません.あるcaseに表示されていないbreakがこのcaseである場合、プログラムは次のcaseを実行します(存在する場合).C、C++からGo言語に移行したばかりのプログラマーにとって、ここには「ピット」が存在し、本人も開発中にこの「ピット」を踏んだことがある.それは、Go言語がswitch分岐文の各caseにbreak文を自動的に追加することである.つまり、Go言語でプログラムがcaseプロセスに入り、プログラムに表示されているbreakというcaseがあるかどうかにかかわらず、プログラムは他のcaseプロセスを実行し続けるのではなく,switchプロセス全体を直接終了し,ここで簡単な実験を行う.
各caseにbreak文を追加するように表示されます.
package main

import "fmt"

func main() {

    var num = 10

    switch num {
    case 5:
        fmt.Println("num is 5")
        break
    case 10:
        fmt.Println("num is 10")
        break
    case 15:
        fmt.Println("num is 15")
        break
    default:
        fmt.Println("num is default branch")
    }

    return
}

プログラムの実行結果は次のとおりです.
num is 10

各caseに表示されるbreak文を削除して、結果を見てみましょう.
package main

import "fmt"

func main() {

    var num = 10

    switch num {
    case 5:
        fmt.Println("num is 5")
    case 10:
        fmt.Println("num is 10")
    case 15:
        fmt.Println("num is 15")
    default:
        fmt.Println("num is default branch")
    }

    return
}

プログラムの実行結果は次のとおりです.
num is 10

明らかに、各case文に表示されるbreak文の追加は、その中の1つのブランチプロセスのみを実行します.これは、breakによってcaseを実行するたびに数を制御したいプログラマーにとって、確かに大きな「ピット」です.