
Photo by Karolina Grabowska from Pexels
Goでゴルーチンを使ってコードを書いてるときに、詰まったことがあったのでメモ
問題の症状
caseの中でチャネルの受信と送信を同時にしようとすると、
条件判定の最中にブロックしてしまうことがある
|
|
具体的には、上記のコードでcontextをcancelしても
case <-ctx.Done():
のcaseに入っていかず、
case sendCh <- <-ch:
でブロックしてしまった
対策
普通に一回チャネルから受け取ったものを変数に代入してから、チャネルに送り直す
|
|