为了账号安全,请及时绑定邮箱和手机立即绑定

goroutines 与数据列表并行运行 post api

goroutines 与数据列表并行运行 post api

Go
慕桂英3389331 2022-05-10 16:22:55
这是我第一次使用 go,我来自 python 背景,我正在尝试使用具有不同帖子数据集的 goroutine 并行运行这个帖子 api( https://reqres.in/api/users )这是此代码中的变量 jsonStr 。非常感谢您与数据列表并行运行此 api 的任何帮助我的数据data = [{"name": "bonny gaud", "movies": ["Terminator", "Transformer"], {"name": "Sarah Palin", "movies": ["No country for old", "占士邦”] }我的代码:package mainimport (    "fmt"    "io/ioutil"    "net/http"    "time"    "bytes")func main() {    start := time.Now()    url := "https://reqres.in/api/users"    fmt.Println("URL:>", url)    var jsonStr = []byte(`{"name": "paul rudd", "movies": ["I Love You Man", "Role Models"] }`)    req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonStr))    req.Header.Set("X-Custom-Header", "myvalue")    req.Header.Set("Content-Type", "application/json")    client := &http.Client{}    resp, err := client.Do(req)    if err != nil {        panic(err)    }    defer resp.Body.Close()    fmt.Println("response Status:", resp.Status)    fmt.Println("response Headers:", resp.Header)    body, _ := ioutil.ReadAll(resp.Body)    fmt.Println("response Body:", string(body))    fmt.Print("Everything:", time.Since(start))    fmt.Print(string(body))}
查看完整描述

1 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

您可以使用 waitGroup 或 errGroup。这是示例:


package main


import (

    "bytes"

    "fmt"

    "golang.org/x/sync/errgroup"

    "io/ioutil"

    "net/http"

    "time"

)


func main() {

    dataSets := []string{`{"name": "paul rudd", "movies": ["I Love You Man", "Role Models"] }`,

        `{"name": "paul rudd", "movies": ["I Love You Man", "Role Models"] }`}


    var eg errgroup.Group


    client := http.DefaultClient

    for _, jsonStr := range dataSets {

        eg.Go(func() error {

            return callClient(client, jsonStr)

        })

    }


    if err := eg.Wait(); err != nil {

        fmt.Printf("Encountered error: %v", err)

    }


    fmt.Println("Successfully finished.")

}


func callClient(client *http.Client, jsonStr string) error {

    start := time.Now()

    url := "https://reqres.in/api/users"

    fmt.Println("URL:>", url)


    req, err := http.NewRequest("POST", url, bytes.NewBuffer([]byte(jsonStr)))

    req.Header.Set("X-Custom-Header", "myvalue")

    req.Header.Set("Content-Type", "application/json")


    resp, err := client.Do(req)

    if err != nil {

        return fmt.Errorf("send request: %w", err)

    }

    defer resp.Body.Close()


    fmt.Println("response Status:", resp.Status)

    fmt.Println("response Headers:", resp.Header)


    body, err := ioutil.ReadAll(resp.Body)

    if err != nil {

        return fmt.Errorf("read body: %w", err)

    }


    fmt.Println("response Body:", string(body))


    fmt.Print("Everything:", time.Since(start))

    fmt.Print(string(body))


    return nil

}

查看完整回答
反对 回复 2022-05-10
  • 1 回答
  • 0 关注
  • 134 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号