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文を追加するように表示されます.
プログラムの実行結果は次のとおりです.
各caseに表示されるbreak文を削除して、結果を見てみましょう.
プログラムの実行結果は次のとおりです.
明らかに、各case文に表示されるbreak文の追加は、その中の1つのブランチプロセスのみを実行します.これは、breakによってcaseを実行するたびに数を制御したいプログラマーにとって、確かに大きな「ピット」です.
各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を実行するたびに数を制御したいプログラマーにとって、確かに大きな「ピット」です.