for { select {....} }はbreakではfor文を抜けられ無い
golangでtimeoutなどの処理を書く場合に、下記の様にfor文内にselectを記述することがある。 (この時Timeout時にはfor文を抜けたいとす。)
for { select { case someChannel: // timeout以外の処理 case time.After(1 * time.Secound): // timeout時の処理 break } }
しかし、単純にbreakを記述しても、for文を抜けることは出来ない。 for文を抜けるには、Labelを用いてbreakをする必要がある。
Loop: for { select { case someChannel: // timeout以外の処理 case time.After(1 * time.Secound): // timeout時の処理 break Loop } }
また、break
ではなく、return
を使って関数から抜けることを行えば、labelを使用する必要はなくなる。