# 致命错误：所有协程都处于睡眠状态 - 死锁！（for-select没有default）

- **ID:** `go/goroutine-for-select-no-default`
- **领域:** go
- **类别:** runtime_error
- **验证级别:** ai_generated
- **修复率:** 80%

## 根因

一个没有default情况的for-select循环，所有通道都阻塞，导致协程永远睡眠。

## 版本兼容性

| 版本 | 状态 | 引入 | 弃用 |
|------|------|------|------|
| 1.0 | active | — | — |
| 1.20 | active | — | — |

## 解决方案

1. **Add default case to avoid blocking** (95% 成功率)
   ```
   for {
    select {
    case <-ch:
        // handle
    default:
        // non-blocking
    }
}
   ```
2. **Use a done channel to break out of loop** (90% 成功率)
   ```
   done := make(chan struct{})
for {
    select {
    case <-ch:
        // handle
    case <-done:
        return
    }
}
   ```

## 无效尝试

- **Adding time.Sleep inside loop** — Sleep doesn't unblock channels; goroutine still blocked. (90% 失败率)
- **Using break statement to exit loop** — Break only exits select, not for loop; goroutine re-enters select and blocks again. (80% 失败率)
