Вопрос: Как избежать утечек goroutine (goroutine leak) при каналах?
Go
Middle
Без компании
Вопрос: Как избежать утечек goroutine (goroutine leak) при каналах?
Ответы
```go
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
out := make(chan int)
go func() {
defer close(out)
for {
select {
case <-ctx.Done():
return
case out <- 1:
// produced
}
}
}()
// если consumer не читает, producer зависнет без select/ctx
```
**Как это работает:** если отправитель блокируется на записи, а получатель перестал читать, goroutine может зависнуть навсегда. Нужны отмена/буфер/дренаж.