Back to questions
Middle+
3
Как написать параллельные HTTP-запросы на Go?
Companies where asked
Umbrella IT
Answer from AI
sobes.tech AI
Для выполнения параллельных HTTP-запросов в Go обычно используют горутины и sync.WaitGroup для ожидания завершения всех запросов.
Пример:
package main
import (
"fmt"
"net/http"
"sync"
)
func fetch(url string, wg *sync.WaitGroup) {
defer wg.Done()
resp, err := http.Get(url)
if err != nil {
fmt.Printf("Ошибка запроса к %s: %v\n", url, err)
return
}
defer resp.Body.Close()
fmt.Printf("Ответ от %s: %s\n", url, resp.Status)
}
func main() {
urls := []string{
"https://golang.org",
"https://google.com",
"https://github.com",
}
var wg sync.WaitGroup
wg.Add(len(urls))
for _, url := range urls {
go fetch(url, &wg)
}
wg.Wait()
fmt.Println("Все запросы завершены")
}
В этом примере для каждого URL запускается отдельная горутина, которая выполняет HTTP-запрос. WaitGroup гарантирует, что программа дождётся завершения всех запросов перед выходом.