V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
guonaihong
V2EX  ›  Go 编程语言

golang: http client 之间的 pk(gout vs resty)

  •  
  •   guonaihong ·
    guonaihong · 2019-10-24 09:05:56 +08:00 · 2785 次点击
    这是一个创建于 1618 天前的主题,其中的信息可能已经有所发展或是发生改变。

    今天是 1024 节,娱乐一把。一位是小鲜肉(gout),一位是成熟老男人(resty)。来个 golang http client 之间的较量。

    环境

    服务端地址 : 127.0.0.1:8080

    设置查询字符串-query

    resty

    func restyQuery() {
        client := resty.New()
        // string
        _, err := client.R().SetQueryString("k1=v1&k2=v2").Post("http://127.0.0.1:8080/json")
        fmt.Printf("err = %v\n", err)
    
        // slice or array
        _, err = client.R().SetQueryParams(map[string]string{"k1": "v1", "k2": "v2"}).Post("http://127.0.0.1:8080/json")
        fmt.Printf("err = %v\n", err)
    
        // map
        _, err = client.R().SetQueryParams(map[string]string{"k1": "v1", "k2": "v2"}).Post("http://127.0.0.1:8080/json")
        fmt.Printf("err = %v\n", err)
    
        // struct 不支持
    }
    

    gout

    func goutQuery() {
        // string
        err := gout.GET(":8080/query").SetQuery("k1=v1&k2=v2").Do()
        fmt.Printf("err = %v\n", err)
    
        // slice or array
        err = gout.GET(":8080/query").SetQuery([]string{"k1", "v1", "k2", "v2"}).Do()
        fmt.Printf("err = %v\n", err)
    
        // map
        err = gout.GET(":8080/query").SetQuery(gout.H{"k1": "v1", "k2": "v2"}).Do()
        fmt.Printf("err = %v\n", err)
    
        // struct
        err = gout.GET(":8080/query").SetQuery(testData{K1: "v1", K2: "v2"}).Do()
        fmt.Printf("err = %v\n", err)
    }
    

    设置 json body

    resty

    func restyJSON() {
        r := testJSON{}
        client := resty.New()
        resp, err := client.R().SetBody(map[string]interface{}{"key": "val"}).SetResult(&r).Post("http://127.0.0.1:8080/json")
    
        fmt.Printf("err = %v:result%v, resp = %v\n", err, r, resp)
    }
    

    gout

    func goutJSON() {
        r := testJSON{}
        err := gout.POST(":8080/json").SetJSON(gout.H{"key": "val"}).BindJSON(&r).Do()
    
        fmt.Printf("err = %v:result%v\n", err, r)
    }
    

    结论

    单从代码行数来说,小鲜肉 gout 完胜。

    交流学习

    大家对 gout 还有什么期待,可以发 issue。

    github 地址

    https://github.com/guonaihong/gout

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3020 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 11:03 · PVG 19:03 · LAX 04:03 · JFK 07:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.