👩💻👩💻
Контролируй внешние вызовы в Go через контекст с таймаутом👁 Один из частых антипаттернов — зависание приложения из-за зависшего запроса к API или БД. В Go это легко решается с помощью
context.WithTimeout
, чтобы оборвать долгий вызов и не держать ресурсы.
📝
Пример кода:ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()
req, _ := http.NewRequestWithContext(ctx, "GET", "https://example.com", nil)
resp, err := http.DefaultClient.Do(req)
if err != nil {
log.Fatal("request failed:", err)
}
defer resp.Body.Close()
📌📌
Что происходит:– Создаётся контекст с таймаутом 2 секунды
– Запрос отменится, если не выполнится вовремя
–
cancel()
вызывается через
defer
, чтобы не оставлять ресурсы
– Работает не только с HTTP, но и с базами, брокерами, gRPC
🔎 Если контекст важен в глубоко вложенной логике, его стоит прокидывать по стеку вызовов. Это даёт гибкий контроль — можно отменить всю цепочку операций, если пользователь отменил запрос или вышел за лимит времени.
❗️ Такой подход особенно важен в микросервисной архитектуре, где нужно контролировать каждый вызов и избегать каскадных фейлов из-за зависших соединений. Рабочее решение, которое должно быть в любом продакшен-коде.
tags: #go
#go #разработка
#разработка #полезно
#полезно❤️ @recura_tech