Sobes.tech
Senior

Kā rakstīt paralēlas HTTP pieprasījumus Golang?

sobes.tech AI

Atbilde no AI

Go valodā, lai veiktu paralēlas HTTP pieprasījumus, parasti tiek izmantotas gorutinas un kanāli rezultātu savākšanai. Piemērs:

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)
    }
}

Šeit katram URL tiek palaista gorutina, kas veic HTTP pieprasījumu un sūta rezultātu uz kanālu. Galvenā funkcija lasa no kanāla tik reižu, cik pieprasījumu tika veikts, tā savācot visus atbildes paralēli.