go
runtime_error
ai_generated
true
panic: close of closed channel
ID: go/panic-close-of-closed-channel
80%Fix Rate
90%Confidence
0Evidence
2024-04-02First Seen
Version Compatibility
| Version | Status | Introduced | Deprecated | Notes |
|---|---|---|---|---|
| 1.0+ | active | — | — | — |
Root Cause
close(ch) invoked more than once, often from multiple cleanup paths or deferred closes.
generic中文
close(ch) 被调用多次,通常来自多条清理路径或多个 defer 关闭。
Workarounds
-
95% success
var once sync.Once once.Do(func() { close(ch) }) -
93% success
go func() { defer close(ch) for v := range src { ch <- v } }()
Dead Ends
Common approaches that don't work:
-
70% fail
Silently swallows a logic bug; downstream consumers may still observe inconsistent state.
-
95% fail
Multiple goroutines closing the same channel guarantees the panic.