> Для чего нужен select без default кейса в Go (Go)

Уровень: senior · Роль: backend · Язык: Go · Категория: Технические вопросы

Компании: Lamoda

Стек: Go

> Пример ответа

select без default в Go используется для блокирующего ожидания одного из нескольких канальных событий. Горутина приостанавливается до тех пор, пока хотя бы один из case не станет готовым к выполнению (чтение из заполненного канала или запись в пустой/незаполненный канал).

Основные сценарии применения:

  1. Ожидание первого результата из нескольких конкурентных операций (например, запрос к двум разным серверам).
  2. Тайм-аут с помощью time.After - блокируемся, пока не придёт ответ или не истечёт таймер.
  3. Мультиплексирование каналов - обработка данных из нескольких источников, когда нужно дождаться любого из них.

Пример:

GO
select {
case msg1 := <-ch1:
fmt.Println("Получено из ch1:", msg1)
case msg2 := <-ch2:
fmt.Println("Получено из ch2:", msg2)
case <-time.After(1 * time.Second):
fmt.Println("Тайм-аут")
}

Здесь без default горутина блокируется, пока не сработает один из case. Если бы был default, то при недоступности каналов сразу выполнился бы он, что изменило бы логику на неблокирующую.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью