Senior
როგორ დავწეროთ პარალელური HTTP მოთხოვნები Golang-ში?
sobes.tech AI
პასუხი AI-სგან
Go ენის გამოყენებით, პარალელური HTTP მოთხოვნების შესასრულებლად ჩვეულებრივ გამოიყენება გორუტინები და არხები შედეგების შეგროვებისთვის. მაგალითი:
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)
}
}
აქ, თითო URL-ისთვის იწყება გორუტინა, რომელიც ახორციელებს HTTP მოთხოვნას და აგზავნის შედეგს არხზე. მთავარი ფუნქცია კითხულობს არხიდან იმდენჯერ, რამდენიც მოთხოვნაა, და ამგვარად აგროვებს ყველა პასუხს პარალელურად.