Golang Go语言中 http client 之间的 pk(gout vs resty)

发布于 1周前 作者 sinazl 来自 Go语言

Golang Go语言中 http client 之间的 pk(gout vs resty)

今天是 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


更多关于Golang Go语言中 http client 之间的 pk(gout vs resty)的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于Golang Go语言中 http client 之间的 pk(gout vs resty)的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Golang中,选择适合的HTTP客户端库对于提升开发效率和代码质量至关重要。针对goutresty这两个流行的HTTP客户端库,我们可以从以下几个方面进行对比:

  1. 易用性与功能

    • gout:设计简洁,易于上手,适合快速构建HTTP请求。它提供了直观的链式调用方式,便于设置请求参数和头信息。
    • resty:功能丰富,支持更多高级特性,如请求重试、超时控制、自动解析JSON响应等。对于需要复杂HTTP交互的场景,resty可能更具优势。
  2. 性能

    • 两者在性能上的差异通常不大,选择时更应考虑具体使用场景下的需求。resty由于功能更全面,可能在某些情况下会引入额外的开销,但通常这种差异对大多数应用来说是可以接受的。
  3. 社区与文档

    • resty:拥有更广泛的用户基础和活跃的社区支持,文档详尽,易于查找解决方案。
    • gout:虽然社区规模相对较小,但文档清晰,学习曲线平缓。

综上所述,选择gout还是resty主要取决于你的具体需求。如果你需要一个轻量级、易用的HTTP客户端,gout是一个不错的选择。而如果你需要更多高级功能和更广泛的社区支持,resty可能更适合你。在做出决定前,建议查阅两者的官方文档并尝试在项目中实际应用,以找到最适合你的工具。

回到顶部