Monors Note

Pythonとそれ以外いろいろ

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を使用する必要はなくなる。