Sobes.tech
Senior

Comment écrire des requêtes HTTP parallèles en Golang?

sobes.tech IA

Réponse de l'IA

En Go, pour effectuer des requêtes HTTP en parallèle, on utilise généralement des goroutines et des canaux pour collecter les résultats. Exemple:

package main

import (
    "fmt"
    "io/ioutil"
    "net/http"
)

func fetch(url string, ch chan<- string) {
    resp, err := http.Get(url)
    if err != nil {
        ch <- fmt.Sprintf("error: %v", err)
        return
    }
    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        ch <- fmt.Sprintf("error reading body: %v", err)
        return
    }
    ch <- string(body)
}

func main() {
    urls := []string{
        "https://example.com",
        "https://golang.org",
        "https://httpbin.org/get",
    }

    ch := make(chan string)

    for _, url := range urls {
        go fetch(url, ch)
    }

    for range urls {
        fmt.Println(<-ch)
    }
}

Ici, pour chaque URL, une goroutine est lancée pour faire la requête HTTP et envoyer le résultat dans le canal. La fonction principale lit du canal autant de fois qu'il y a de requêtes, recueillant ainsi toutes les réponses en parallèle.