Чтение из nil-канала допустимо синтаксически, но блокируется навсегда. В select такая ветка никогда не готова и может использоваться для временного отключения канала.
Можно ли читать из nil-канала?
Чтение из nil-канала допустимо синтаксически, но блокируется навсегда. В select такая ветка никогда не готова и может использоваться для временного отключения канала.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Чтение из nil-канала допустимо синтаксически, но блокируется навсегда. В select такая ветка никогда не готова и может использоваться для временного отключения канала.
var ch chan int
select {
case <-ch:
// Не выполнится, пока ch равен nil.
default:
// Выполнится сразу.
}
Это отличается от закрытого канала: из закрытого после опустошения буфера сразу читается нулевое значение с ok=false. Без другой готовой ветки select будет ждать; если ждать больше нечего во всей программе, runtime может сообщить deadlock.