Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Golang: context, timeout, http request, cancel, golang

Как сделать HTTP-запрос отменяемым по контексту с таймаутом?

Проверяет понимание отмены HTTP-запросов через контекст с таймаутом в Go.

Короткий ответ

В Go для отмены HTTP-запроса по таймауту используется пакет context. Создаётся контекст с таймаутом через context.WithTimeout, который автоматически отменяется по истечении времени. Этот контекст передаётся в http.NewRequestWithContext. Если таймаут истекает, запрос отменяется, и клиент получает ошибку. Это позволяет избежать зависания программы при недоступности сервера.

Длинный ответ

Отмена HTTP-запроса через контекст с таймаутом

В 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, чтобы гарантировать, что программа не зависнет при проблемах с сетью или сервером.

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • Golang

    Golang

Ключевые слова

#context

#timeout

#http request

#cancel

#golang

Подпишись на Golang Developer в телеграм

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.