Ответ
Используйте 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() // ожидаем завершения всех горутин
Ключевые моменты:
wg.Add(1)перед запуском каждой горутиныdefer wg.Done()для сигнализации завершения- Передавайте url как параметр, чтобы избежать проблем с замыканием
wg.Wait()блокирует выполнение, пока все запросы не завершатся
Для ограничения количества одновременных запросов можно использовать канал-семафор или errgroup.