前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一个非常棒的http库,提升开发效率的利器

一个非常棒的http库,提升开发效率的利器

作者头像
阿伟
发布2021-02-24 10:16:23
2.2K0
发布2021-02-24 10:16:23
举报
文章被收录于专栏:GoLang那点事

平时开发过程中,开发http请求工具类,甚至http压测模拟都是开发人员的家长便饭,go语言中,虽然已经为开发人员提供方便的http库,但在实际开发中,依然有很多冗余代码,在一些复杂请求中,也需要很多的开发量,此时你要这样想,你遇到的问题,大家也会遇到,这时找找工具类,或者一些库什么的,会起到事半功倍的作用,这不,笔者发现了一个http请求封装的库gout,小而巧,号称瑞士军刀。

代码语言:javascript
复制
代码语言:javascript
复制
https://github.com/guonaihong/gout

Go原生的Http的请求

我们采用go原生的http发送一个get和一个post请求,来看go原生http需要编写那些代码,当需要cookie或者一些其他参数时代码将会下面的代码成倍增加,而且需要我们学习更多的原生api,成本也会增加

Gout的示例

gout提供了非常方便链式api,封装了很多内部细节,对于研发人员常用的一些场景都做了非常不做的支持,而且还提供了debug,压测,追踪,重试,自定义等更多功能,下面带领大家一起体验下

一些简单的使用场景 ,Get,Post,Delete方法,如下代码,每种方法代表i中HTTP请求的methd, .do表示开始发送请求,至此一个HTTP请求就发送完毕

上面的代码问题很明显,怎么获取结果呢?错误了怎么办呢?,下面看一个GET的示例,声明一个result字符串变量,代表http返回的内容,通过BindBody把返回的结果绑定到result变量中,这个一个完整的请求就OK了,同时http请求结果的绑定还支持json,yam,xml,流等格式,主要方法就是BindJSON,BondXML,方法命名方式以此类推

我们了解了请求的发送,返回值的绑定,那么传参该怎么穿呢?支持哪些格式,一起来看看,我们支持GET请求直接在url后面拼接字符串就可以,Gout同时也支持设置参数方法

除了上面这些简单的查询,gout还支持回调处理,debug模式,trace跟踪,压测模拟等众多特性,一起看看这些特性,回调处理处理指的是针对http返回结果的不同code做出不同的处理结果,debug模式下会打印处理http发送请求时一些head信息,方便开发人员问题排查,trace跟踪会打印http请求各阶段的耗时,包括链接,处理,相应等,压测模拟指的是我们可以很方便的对一个http接口发起压测,同时统计压测结果。

代码语言:javascript
复制

下面截图告诉了我们QPS/s时810,失败的请求是52个,并发级别是20,持续压测时间10.01s,50%的请求都在20ms内完成,99%的请求都在73ms完成。

Gout完整的特性

下面这些特性是gout官网的描述,感兴趣的同学可以再细细研究一下,看看源码实现,我相信这个库一定给你的开发效率和工具类带来很多方便,希望帮助到大家

1、支持设置 GET/PUT/DELETE/PATH/HEAD/OPTIONS

2、支持设置请求 http header(可传 struct,map,array,slice 等类型)

3、支持设置 URL query(可传 struct,map,array,slice,string 等类型)

4、支持设置 json 编码到请求 body 里面(可传struct, map, string, []byte 等类型)

5、支持设置 xml 编码到请求 body 里面(可传struct, string, []byte 等类型)

6、支持设置 yaml 编码到请求 body 里面(可传struct, map, string, []byte 等类型)

7、支持设置 form-data(可传 struct, map, array, slice 等类型)

8、支持设置 x-www-form-urlencoded(可传 struct,map,array,slice 等类型)

9、支持设置 io.Reader,uint/uint8/uint16...int/int8...string...[]byte...float32,float64 至请求 body 里面

10、支持解析响应body里面的json,xml,yaml至结构体里(BindJSON/BindXML/BindYAML)

11、支持解析响应body的内容至io.Writer, uint/uint8...int/int8...string...[]byte...float32,float64

12、支持解析响应header至结构体里

13、支持接口性能benchmark,可控制压测一定次数还是时间,可控制压测频率

14、支持retry-backoff,可以指定重试条件

15、支持发送裸http数据包

16、支持导出curl命令

17、传入自定义*http.Client

18、支持请求中间件(https://github.com/antlabs/gout-middleware)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 GoLang那点事 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Go原生的Http的请求
  • Gout的示例
  • Gout完整的特性
相关产品与服务
消息队列 TDMQ
消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档