Выбор ответа Middle Каналы и select спрашивают часто обновлено
Таймаут на операцию через select
Вопрос
Как ограничить ожидание ответа из канала res одной секундой?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: select { case v := <-res: ...; case <-time.After(time.Second): ... }. select ждёт первое из двух событий: ответ или срабатывание таймера.
Варианты ответа
time.Sleep(time.Second); v := <-res, ожидание ограничено сномselect { case v := <-res: ...; case <-time.After(time.Second): ... }правильный ответv := <-res; if time.Since(start) > time.Second { ... }res.SetDeadline(time.Now().Add(time.Second))
Разбор
select ждёт первое из двух событий: ответ или срабатывание таймера. Sleep перед чтением всегда ждёт секунду и потом всё равно может зависнуть. Проверка времени после чтения не ограничивает само ожидание. У каналов нет дедлайнов. В сервисном коде вместо time.After чаще используют ctx.Done() от context.WithTimeout.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.