🚧

[Golang] switch は fallthrough しない

知らずに間違った使い方をしてしまったのでメモ


文字コードが UTF-8 か、または ISO-8859-1 のときに特定の処理を実行したいのだけど、以下のコードでは想定通りに動かなかった。

switch charset {
case "UTF-8":
case "ISO-8859-1":
 fmt.Println("this is utf-8")

なぜなら、Golang では case の終わりに暗黙的に break が入るから。 つまり、上のコードはこう書いているのと同じ。

switch charset {
case "UTF-8":
	break
case "ISO-8859-1":
	fmt.Println("this is utf-8")
	break

想定通りに動かすには、以下のように fallthrough を明示的に書く。

switch charset {
case "UTF-8":
	fallthrough
case "ISO-8859-1":
	fmt.Println("this is utf-8")

または、以下のようにリストで書くこともできる。ふつうはこっちかな。

switch charset {
case "UTF-8", "ISO-8859-1":
	fmt.Println("this is utf-8")