Edited at

[Go] for { select { default: break } } ではループを抜けられない

過去の自分を含め、意外と間違っている人が多いのですが、

for {

select {
default:
break
}
}

では for ループを抜けることができません。

これは switch の case や default 内で break を使っても switch は抜けらますが、その外側のループは抜けられないことと同じです。

恐らく default では例外処理を行うことが多く、例外処理のテストを適切に行っていないためこのバグが潜在しているものと思われます。

そこで、Labeled Break を使いましょう!

L:

for {
select {
default:
break L
}
}

これでラベルの貼られた for から break L で抜けることができます。

あ、func で包んで即実行してもいいですが Labeled Break のほうがより直感的ですね。