Sobes.tech
Назад к вопросам
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) // читатель читает до закрытия
}