Ответ
Таймаут в HTTP-запросе ограничивает время ожидания ответа от сервера, предотвращая зависание клиента при проблемах с сетью или сервером. В Go можно задать таймаут через context или http.Client:
client := &http.Client{
Timeout: 5 * time.Second, // Общий таймаут на весь запрос
}
// Или с контекстом
ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
defer cancel()
req, _ := http.NewRequestWithContext(ctx, "GET", "https://example.com", nil)
resp, err := client.Do(req)
Основные сценарии:
- Таймаут соединения – если сервер долго не отвечает на установку соединения.
- Таймаут чтения/записи – если передача данных затягивается.
- Deadline – общее ограничение времени на весь запрос.