Как реализовать timeout для операции?

Middle
299 просмотров
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(). Для HTTP: http.Client{Timeout: 5*time.Second}. Context предпочтительнее time.After — он каскадно отменяет все дочерние операции. time.After для простых случаев ок, но помни — таймер не GC-ится пока не сработает.

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

Оверхед pprof?