> Для чего нужен select без default кейса в Go (Go)
Уровень: senior · Роль: backend · Язык: Go · Категория: Технические вопросы
Компании: Lamoda
Стек: Go
> Пример ответа
select без default в Go используется для блокирующего ожидания одного из нескольких канальных событий. Горутина приостанавливается до тех пор, пока хотя бы один из case не станет готовым к выполнению (чтение из заполненного канала или запись в пустой/незаполненный канал).
Основные сценарии применения:
- Ожидание первого результата из нескольких конкурентных операций (например, запрос к двум разным серверам).
- Тайм-аут с помощью
time.After- блокируемся, пока не придёт ответ или не истечёт таймер. - Мультиплексирование каналов - обработка данных из нескольких источников, когда нужно дождаться любого из них.
Пример:
GOselect {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, то при недоступности каналов сразу выполнился бы он, что изменило бы логику на неблокирующую.
> Похожие задачи по Go
Какие примитивы синхронизации есть в стандартной библиотеке Go
Как называются типы объектов, которые при модификации возвращают копию, а не изменяют исходный объект
Как называются ресиверы в Go и когда использовать ресивер по значению или по указателю
Используете ли вы пакет sync.Pool для контроля памяти в Go
> Похожие задачи по backend
Какие примитивы синхронизации есть в стандартной библиотеке Go
Как называются типы объектов, которые при модификации возвращают копию, а не изменяют исходный объект
Как называются ресиверы в Go и когда использовать ресивер по значению или по указателю
Используете ли вы пакет sync.Pool для контроля памяти в Go
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью