# error: infinite loop reading zero values from closed channel

- **ID:** `go/receive-from-closed-channel-loop`
- **Domain:** go
- **Category:** data_error
- **Verification:** ai_generated
- **Fix Rate:** 80%

## 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.

## Version Compatibility

| Version | Status | Introduced | Deprecated |
|---------|--------|------------|------------|
| 1.x | active | — | — |

## Workarounds

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

## Dead Ends

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