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.