TGViewer
Golang Backend | YeaHub Golang Backend | YeaHub @yeahub_go_backend · 861 subscribers
Post #706 139
Контекст и таймауты в HTTP клиентах Go

Правильная работа с таймаутами критична для надежности приложений.

Таймауты по умолчанию

http.Client без таймаута может зависнуть навсегда. Всегда устанавливайте Timeout.


client := &http.Client{
Timeout: 10 * time.Second,
}


Контекст в запросах

Передавайте контекст через NewRequestWithContext. Это позволяет отменять запросы.


ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()

req, _ := http.NewRequestWithContext(ctx, "GET", url, nil)
resp, err := client.Do(req)


Раздельные таймауты

Транспорт позволяет настроить отдельные таймауты для соединения и чтения.


transport := &http.Transport{
DialContext: (&net.Dialer{
Timeout: 5 * time.Second,
}).DialContext,
ResponseHeaderTimeout: 10 * time.Second,
}


Отмена запросов

При отмене контекста запрос немедленно прерывается. Это экономит ресурсы.


select {
case <-ctx.Done():
return ctx.Err()
case result := <-resultCh:
return result
}


Повторы с backoff

Комбинируйте таймауты с повторными попытками. Используйте экспоненциальную задержку.

Практические советы

Не используйте context.Background в обработчиках HTTP. Передавайте контекст запроса дальше.

Для внешних API устанавливайте короткие таймауты. Для внутренних сервисов можно увеличить.

Правильные таймауты предотвращают каскадные отказы и утечки ресурсов.
  • ❤ 1
  • 👍 1
More from @yeahub_go_backend
  1. Oct 6, 2026Grafana для разработчика: базовые сценарии Grafana визуализирует метрики и помогает находи…
  2. Oct 5, 2026#Собес #Go_interfaces #structural_typing #duck_typing 🤔 Почему в Go интерфейсы реализован…
  3. Oct 2, 2026#podcast #все 📚 Kolesa Podcast Podcast by IT-компания Kolesa Group. В целом он обо всём и…
  4. Oct 1, 2026#Собес #index #write #performance 🤔 Почему индексы могут замедлять INSERT и UPDATE операц…
  5. Sep 30, 2026#Собес #golang #postgres #kafka 🤔 Техническое собеседование - Middle Golang Backend Devel…
  6. Sep 29, 2026Пакет io: работа с потоками данных Пакет io предоставляет базовые интерфейсы для работы с…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →