# goroutine leak: goroutine blocked forever on <-ch with no sender

- **ID:** `go/goroutine-leak-blocked-recv`
- **Domain:** go
- **Category:** resource_error
- **Verification:** ai_generated
- **Fix Rate:** 80%

## Root Cause

A receive on a channel that will never be sent to or closed leaves the goroutine parked permanently.

## Version Compatibility

| Version | Status | Introduced | Deprecated |
|---------|--------|------------|------------|
| 1.0+ | active | — | — |

## Workarounds

1. **** (94% success)
   ```
   select {
case v := <-ch:
    handle(v)
case <-ctx.Done():
    return
}
   ```
2. **** (88% success)
   ```
   defer close(ch)
   ```

## Dead Ends

- **** — Ignoring the timeout branch means the goroutine still leaks if it loops; also time.After leaks timers. (60% fail)
- **** — Closing from the receiver does not unblock the receive; the receive already returned zero value and panics on later sends. (70% fail)
