Ответ
При чтении из закрытого канала возвращается нулевое значение типа канала и false как второе значение, указывающее на отсутствие данных. Это позволяет отличить реальные нулевые значения от случая закрытого канала.
ch := make(chan int)
close(ch)
val, ok := <-ch
// val = 0, ok = false
Важные моменты:
- Чтение из закрытого канала не вызывает паники
- Операция всегда немедленно возвращает управление
- Если канал буферизованный, сначала будут прочитаны все оставшиеся значения, затем вернутся нулевые значения
Пример с буферизованным каналом:
ch := make(chan int, 2)
ch <- 1
ch <- 2
close(ch)
// Сначала прочитаем 1 и 2, затем нулевые значения Видео-ответы
▶
▶