Go select Is a One-Shot Choice, Not a Continuous Listener

It is easy to look at a Go select and imagine a small event loop that keeps watching every channel forever. That mental model is close enough for simple code. It becomes misleading when a case body changes channel state or another goroutine becomes runnable. The smaller model is more useful: one select execution → choose one communication that can proceed → perform that communication → run that case body → this select execution is finished If the program should keep watching channels, something outside that select must enter it again. Most often, that is a for loop. ...

September 22, 2026 · 6 min · 1207 words · Jack Li