Sobes.tech
Middle+
21

Кто должен закрывать канал - писатель или читатель?

Companies where asked
Magnit Tech

Answer from AI

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) // читатель читает до закрытия
}