Как реализовать timeout pattern?

Middle
346 просмотров
AFK Offer AI

select с time.After: select { case result := <-ch: // ok, case <-time.After(5 * time.Second): // timeout }. Или через context: ctx, cancel := context.WithTimeout(ctx, 5*time.Second); defer cancel(). Передаёшь ctx в горутину, она проверяет ctx.Done(). Context лучше — отмена каскадная, time.After может утечь если результат пришёл раньше (в Go 1.23 фиксится). Для HTTP запросов: http.Client{Timeout: 10 * time.Second} — самый простой вариант.

Следующий вопрос

Как профилировать в production?