32
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-04-24

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

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 のほうがより直感的ですね。

32
12
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
32
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?