Sobes.tech
Назад к вопросам
Middle+
4

Как написать параллельные HTTP-запросы на Go?

Компании, где спрашивали
Umbrella IT

Ответ от нейросети

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 гарантирует, что программа дождётся завершения всех запросов перед выходом.