Назад к вопросам
Junior — Middle
79
Какие последствия могут возникнуть, если канал остается открытым и не закрывается в программе?
Компании, где спрашивали
Магнит Тех
Ответ от нейросети
sobes.tech AI
Если канал (channel) в Go остается открытым и не закрывается, могут возникнуть следующие последствия:
- Горутинные блокировки: если получатель ожидает закрытия канала для завершения работы, он может навсегда зависнуть.
- Утечки ресурсов: горутины, ожидающие чтения из канала, могут не завершиться, что приведет к утечке памяти.
- Непредсказуемое поведение программы: логика, зависящая от закрытия канала (например, завершение цикла
for range), не сработает.
Важно закрывать канал, когда больше не планируется отправлять данные, чтобы получатели могли корректно обработать завершение передачи.
ch := make(chan int)
go func() {
for i := 0; i < 5; i++ {
ch <- i
}
close(ch) // Закрываем канал после отправки всех данных
}()
for val := range ch {
fmt.Println(val)
}