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

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可能更适合你。在做出决定前,建议查阅两者的官方文档并尝试在项目中实际应用,以找到最适合你的工具。

回到顶部