Select — конструкция языка для ожидания операций каналов, а не функция. Его синтаксис и выбор готовой ветки определяет язык.
Является ли select функцией в Go
Select — конструкция языка для ожидания операций каналов, а не функция. Его синтаксис и выбор готовой ветки определяет язык.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Сравните select { case value := <-ch: use(value); case <-ctx.Done(): return } и вызов обычной функции. Почему select нельзя передать как значение?
Ответ
Select — конструкция языка для ожидания операций каналов, а не функция. Его синтаксис и выбор готовой ветки определяет язык.
Если готовы несколько ветвей, код не должен полагаться на их текстовый приоритет. Default делает выбор неблокирующим, но цикл с default без полезной работы может расходовать CPU. У nil-канала операция никогда не готова, а закрытый канал при чтении готов и возвращает zero value с ok=false.