Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Golang: goroutine, wait group, channel, http request, parallel

Как реализовать параллельный запуск нескольких запросов к стороннему API?

Этот вопрос проверяет умение распараллелить I/O-задачи через горутины и ждать результаты.

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

Соберите горутины, каждая выполняет HTTP-запрос, и используйте sync.WaitGroup для ожидания их завершения. Результаты собирайте в канал или срез, защищая доступ Mutex или через заранее инициализированный срез по индексу. По завершении WaitGroup.Wait() агрегируйте данные.

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

WaitGroup + каналы:

var wg sync.WaitGroup
results := make(chan Result)
for _, url := range urls {
  	wg.Add(1)
 	go func(u string) {
    		defer wg.Done()
    		res := fetch(u)
    		results <- res
  	}(url)
}
go func() {
  	wg.Wait()
  	close(results)
}()
for r := range results { process(r) }

Buffered Channel:

  • make(chan Result, len(urls)) чтобы избежать блокировок при отправке.

Mutex + срез:

mu := sync.Mutex{}
out := make([]Result, len(urls))
// внутри горутины: mu.Lock(); out[i]=res; mu.Unlock()

Контекст и таймауты:

  • Используйте context.WithTimeout для отмены долгих запросов.

  • Аватар

    Golang Guru

    Maxim Lukyanov

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

Уровень

  • Рейтинг:

    2

  • Сложность:

    5

Навыки

  • Golang

    Golang

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

#goroutine

#wait group

#channel

#http request

#parallel

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

  • Аватар

    Golang Guru

    Maxim Lukyanov

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