Sobes.tech
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 მოთხოვნას და აგზავნის შედეგს არხზე. მთავარი ფუნქცია კითხულობს არხიდან იმდენჯერ, რამდენიც მოთხოვნაა, და ამგვარად აგროვებს ყველა პასუხს პარალელურად.