Назад к вопросам
Middle+
1
Кто должен закрывать канал - писатель или читатель?
Компании, где спрашивали
Magnit Tech
Ответ от нейросети
sobes.tech AI
В Go канал должен закрывать писатель (sender), а не читатель (receiver). Закрытие канала сигнализирует, что больше не будет отправлено значений, и читатели могут корректно завершить чтение, обнаружив закрытый канал.
Если читатель закроет канал, а писатель продолжит попытки отправки, это приведёт к панике (panic). Поэтому ответственность за закрытие канала лежит на стороне, которая его пишет.
Пример:
ch := make(chan int)
go func() {
defer close(ch) // писатель закрывает канал
for i := 0; i < 5; i++ {
ch <- i
}
}()
for val := range ch {
fmt.Println(val) // читатель читает до закрытия
}