go
data_error
ai_generated
true
error: infinite loop reading zero values from closed channel
ID: go/receive-from-closed-channel-loop
80%Fix Rate
86%Confidence
0Evidence
2024-06-08First Seen
Version Compatibility
| Version | Status | Introduced | Deprecated | Notes |
|---|---|---|---|---|
| 1.x | active | — | — | — |
Root Cause
A for v := range ch loop is expected to terminate, but a for { v := <-ch } loop keeps returning zero values forever after close because receives from a closed channel never block.
generic中文
期望 for v := range ch 终止,但写成 for { v := <-ch } 的循环在 channel 关闭后会永远返回零值,因为从已关闭 channel 接收永不阻塞。
Workarounds
-
97% success
for { v, ok := <-ch if !ok { return } process(v) } -
98% success
for v := range ch { process(v) }
Dead Ends
Common approaches that don't work:
-
85% fail
Does not stop the loop; still processes infinite zero values and corrupts data.
-
75% fail
Zero is a legitimate value; breaks on real data and still races with close.