[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")