Ответ
При чтении из закрытого канала возвращается нулевое значение типа канала и 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, затем нулевые значения Видео-ответы
▶
Mock-собеседование по Golang и PostgreSQL от Senior из Ozon
▶
Открытое интервью на Middle Go-разработчика
▶
Моковое собеседование на Middle Golang разработчика | Solvery & Uproger
▶
Golang живое собеседование Middle Go разработчика!
▶
Тестовое собеседование на позицию Go-разработчика / Ingternet
▶
Job interview на вакансию Golang Developer middle // Курс «Golang Developer. Professional»
▶
Открытое собеседование на Go-разработчика | Анонс менторской программы