Sobes.tech
Middle+

Go тілінде параллель HTTP сұрауларын қалай жазуға болады?

sobes.tech AI

AI-дан жауап

Go тілінде параллель HTTP сұрауларын орындау үшін әдетте горутиндер мен барлық сұраулардың аяқталуын күту үшін sync.WaitGroup пайдаланылады.

Мысал:

package main

import (
    "fmt"
    "net/http"
    "sync"
)

func fetch(url string, wg *sync.WaitGroup) {
    defer wg.Done()
    resp, err := http.Get(url)
    if err != nil {
        fmt.Printf("%s-ке сұрау кезінде қате: %v\n", url, err)
        return
    }
    defer resp.Body.Close()
    fmt.Printf("%s-ден жауап: %s\n", url, resp.Status)
}

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

    var wg sync.WaitGroup
    wg.Add(len(urls))

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

    wg.Wait()
    fmt.Println("Барлық сұраулар аяқталды")
}

Бұл мысалда әр URL үшін жеке горутина іске қосылады, ол HTTP сұрауын орындайды. WaitGroup барлық сұраулардың аяқталуын күтеді, содан кейін ғана бағдарлама шығады.