Sobes.tech
Назад к вопросам
Middle+
5

Кто должен закрывать канал?

Компании, где спрашивали
WaterWal

Ответ от нейросети

sobes.tech AI

Закрывать канал должен тот, кто его создал и больше не собирается отправлять в него данные. Это важно, чтобы избежать паники при попытке отправить данные в закрытый канал и чтобы получатели могли корректно определить конец потока данных.

Основные правила:

  • Отправитель закрывает канал, когда больше не будет отправлять значения.
  • Получатели не должны закрывать канал.
  • Закрытие канала сигнализирует получателям, что новых данных не будет.

Пример:

func producer(ch chan<- int) {
    for i := 0; i < 5; i++ {
        ch <- i
    }
    close(ch) // Закрываем канал после отправки всех данных
}

func consumer(ch <-chan int) {
    for val := range ch {
        fmt.Println(val)
    }
    // Когда канал закрыт, цикл завершается
}

func main() {
    ch := make(chan int)
    go producer(ch)
    consumer(ch)
}