Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Golang: goroutine, channel, concurrency, http

Как запустить HTTP-запросы асинхронно в Go?

Работа с HTTP

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

Каждый HTTP-запрос запускается в отдельной горутине, а результат передаётся в канал. Это позволяет выполнять запросы параллельно и обрабатывать их независимо.

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

Асинхронные HTTP-запросы реализуются с помощью горутин. Для каждой URL создаётся отдельная горутина, которая делает запрос и отправляет результат (или ошибку) в канал. Основной поток получает результаты через range по каналу.

Для управления завершением всех запросов удобно использовать sync.WaitGroup, а для отмены по таймауту — context.WithTimeout. Такой подход даёт гибкость и масштабируемость при работе с сетевыми вызовами.

urls := []string{
    "https://example.com",
    "https://golang.org",
    "https://google.com",
}

ch := make(chan string)

for _, url := range urls {
    go func(u string) {
        resp, err := http.Get(u)
        if err != nil {
            ch <- fmt.Sprintf("error: %v", err)
            return
        }
        defer resp.Body.Close()
        ch <- fmt.Sprintf("%s: %d", u, resp.StatusCode)
    }(url)
}

for range urls {
    fmt.Println(<-ch)
}
  • Аватар

    Golang Guru

    Maxim Lukyanov

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

Уровень

  • Рейтинг:

    5

  • Сложность:

    5

Навыки

  • Golang

    Golang

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

#goroutine

#channel

#concurrency

#http

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

  • Аватар

    Golang Guru

    Maxim Lukyanov

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