go runtime_error ai_generated true

致命错误:所有 goroutine 都处于休眠状态 - 死锁!(goroutine 1 [通道接收])

fatal error: all goroutines are asleep - deadlock! (goroutine 1 [chan receive])

ID: go/goroutine-leak-no-sender

其他格式: JSON · Markdown 中文 · English
80%修复率
86%置信度
0证据数
2024-04-15首次发现

版本兼容性

版本状态引入弃用备注
1.20 active
1.21 active

根因分析

一个 goroutine 在从一个永远不会接收数据的通道接收时阻塞,没有活动的发送者。

English

A goroutine is blocked receiving from a channel that never receives data, with no active sender.

generic

解决方案

  1. 95% 成功率
    ch := make(chan int); go func() { ch <- 42 }(); val := <-ch
  2. 85% 成功率
    select { case val := <-ch: case <-time.After(time.Second): }

无效尝试

常见但无效的做法:

  1. 70% 失败

    Receive from closed channel returns zero value immediately, not blocking, but may not be desired.

  2. 90% 失败

    Sleep doesn't create a sender; still blocks forever.