Оптимизация работы с API: context в Go для таймаутов

Практические лайфхаки для разработчиков, DevOps и админов: Docker, Linux, Bash, Python, Golang, Ansible, логи и безопасность — только рабочие решения. Даем готовые команды, конфиги и приёмы диагностики, которые экономят часы и дни. Если нужно быстро настроить, отладить и обезопасить инфраструктуру — вы по адресу.

gocontextтаймауты

👁 Когда вы работаете с внешними API, важно эффективно управлять временем ожидания и отменой запросов, чтобы избежать зависания и утечек ресурсов. В Go для этого идеально подходит пакет context. С помощью контекста можно задавать тайм-ауты и отменять запросы, если они не выполняются вовремя, что особенно важно для микросервисных архитектур.

📝 Пример кода с использованием контекста для работы с API:

package main

import (
  "context"
  "fmt"
  "net/http"
  "time"
)

func fetchData(ctx context.Context, url string) (string, error) {
  req, _ := http.NewRequest("GET", url, nil)
  req = req.WithContext(ctx)
  client := &http.Client{}
  resp, err := client.Do(req)
  if err != nil { return "", err }
  defer resp.Body.Close()
  return resp.Status, nil
}

func main() {
  ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
  defer cancel()
  fmt.Println(fetchData(ctx, "https://jsonplaceholder.typicode.com/todos/1"))
}

📌 Как это работает:

  • Создаём контекст с таймаутом: с помощью context.WithTimeout устанавливаем максимальное время ожидания для запроса.
  • Передаем контекст в запрос: запрос получает контекст, что позволяет отслеживать его выполнение и отменить, если он превысил лимит времени.
  • Ожидаем результат или ошибку: запрос к API выполняется как обычно, но с контролем времени через контекст.
  • Если таймаут истекает, контекст отменяет запрос: при превышении времени ожидания контекст автоматически завершает запрос и возвращает ошибку.

❗️ Это полезно в проектах, где важна высокая устойчивость и минимизация зависаний от внешних сервисов, особенно при работе с множеством API-запросов в микросервисной архитектуре.

tags: #go #разработка #api

🧭 @recura_tech 🌐 VK 🌐 MAX

Скриншот с примером кода на Go, показывающий использование пакета context для таймаутов и отмены HTTP-запросов; виден интерфейс редактора и логотип RECURA.
Пример кода на Go с использованием context; виден логотип RECURA.

Читайте так же