Как можно отправить параллельно 5 запросов к серверу

«Как можно отправить параллельно 5 запросов к серверу» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Используйте sync.WaitGroup и горутины для параллельного выполнения:

var wg sync.WaitGroup
urls := []string{"url1", "url2", "url3", "url4", "url5"}

for _, url := range urls {
    wg.Add(1)
    go func(u string) {
        defer wg.Done()
        resp, err := http.Get(u)
        // обработка ответа/ошибки
    }(url)
}

wg.Wait() // ожидаем завершения всех горутин

Ключевые моменты:

  1. wg.Add(1) перед запуском каждой горутины
  2. defer wg.Done() для сигнализации завершения
  3. Передавайте url как параметр, чтобы избежать проблем с замыканием
  4. wg.Wait() блокирует выполнение, пока все запросы не завершатся

Для ограничения количества одновременных запросов можно использовать канал-семафор или errgroup.