Проверяет понимание отмены HTTP-запросов через контекст с таймаутом в Go.
В Go для управления временем выполнения HTTP-запросов используется пакет context. Он позволяет задать таймаут, по истечении которого запрос автоматически отменяется. Это важно для предотвращения зависаний приложений при медленных или недоступных серверах.
Создаётся контекст с таймаутом через context.WithTimeout. Затем этот контекст передаётся в http.NewRequestWithContext. Когда таймаут истекает, контекст отменяется, и HTTP-клиент прерывает запрос. В ответ клиент получает ошибку, которую можно обработать.
package main
import (
"context"
"fmt"
"net/http"
"time"
)
func main() {
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()
req, err := http.NewRequestWithContext(ctx, "GET", "https://example.com", nil)
if err != nil {
fmt.Println("Error creating request:", err)
return
}
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
fmt.Println("Request failed:", err)
return
}
defer resp.Body.Close()
fmt.Println("Status:", resp.Status)
}Этот подход используется в микросервисах, API-клиентах и любых приложениях, где важно контролировать время выполнения внешних запросов. Таймаут помогает избежать блокировки ресурсов и улучшает отказоустойчивость.
Вывод: Используйте контекст с таймаутом для всех HTTP-запросов в Go, чтобы гарантировать, что программа не зависнет при проблемах с сетью или сервером.