# error: 从已关闭 channel 无限读取零值

- **ID:** `go/receive-from-closed-channel-loop`
- **领域:** go
- **类别:** data_error
- **验证级别:** ai_generated
- **修复率:** 80%

## 根因

期望 for v := range ch 终止,但写成 for { v := <-ch } 的循环在 channel 关闭后会永远返回零值,因为从已关闭 channel 接收永不阻塞。

## 版本兼容性

| 版本 | 状态 | 引入 | 弃用 |
|------|------|------|------|
| 1.x | active | — | — |

## 解决方案

1. **** (97% 成功率)
   ```
   for {
    v, ok := <-ch
    if !ok {
        return
    }
    process(v)
}
   ```
2. **** (98% 成功率)
   ```
   for v := range ch {
    process(v)
}
   ```

## 无效尝试

- **** — Does not stop the loop; still processes infinite zero values and corrupts data. (85% 失败率)
- **** — Zero is a legitimate value; breaks on real data and still races with close. (75% 失败率)
