「Go开源包」requests:一个比net/http包更简洁、高效的开源包
大家好,这里是Go学堂。
(资料图片仅供参考)
今天给大家推荐一个高效的HTTP的请求包:carlmjohnson/requests。项目地址是:https://github.com/carlmjohnson/requests
该包诞生的背景作者在自己的博客中描述了自己为什么写这个request包。作者这样描述go的net/http包:
Go的net/http包虽然功能强大、用途也广泛,但要想正确地使用请求的客户端是非常繁琐的。
我们看下go的net/http包在发送一个web请求时有哪些繁琐的地方。以下是使用标准的net/http包发送请求的一个示例:
func GetFoo() (*T, error) { res, err := http.Get("http://foo/t.json") if err != nil { return nil, err } t := new(T) if err := json.NewDecoder(res.Body).Decode(t); err != nil { return nil, err } return t, nil}
这段代码有如下问题:
没有调用Response.Body.Close关闭连接没有检查响应返回的状态值响应值是字节切片,没有做对应的结构转换这会导致正确使用GetFoo函数应该看起来像下面这样:
func GetFoo(ctx context.Context) (*T, error) { req, err := http.NewRequest("GET", "http://foo/t.json", nil) if err != nil { return nil, err } req = req.WithContext(ctx) res, err := http.DefaultClient.Do(req) if err != nil { return nil, err } defer res.Body.Close() if res.StatusCode < 200 || res.StatusCode > 299 { return nil, fmt.Errorf("bogus status: got %v", res.Status) } t := new(T) if err := json.NewDecoder(res.Body).Decode(t); err != nil { return nil, err } return t, nil}
就是要增加对Context的支持、关闭Response.Body、检查响应的返回值以及对响应值转换成json(或其他格式)。
所以,作者才写了自己的requests库,目的是要让http的请求不再繁琐。
Requests包的使用基于以上问题,requests包就诞生了。该包通过将发送请求时的所有必要信息都抽象成了Builder结构体,通过该结构体来构建、发送和处理HTTP的请求。并且还支持链式操作。
下面我们看一些具体的请求示例。
Get请求,响应结果解析成字符串如下,是发送Get的请求。使用requests包发送Get请求只需要5行代码,而原生的net/http包得需要11多行代码。
Post请求如下,是一个发送Post的请求。使用requests包只用了5行代码,而原生的net/http包需要12多行代码。
将Get请求的JSON结果转换成结构体如下,是Get请求的JSON响应结果解析成对应的结构体。使用requests包只用了7行代码,而使用原生的net/http包需要使用18多行代码。
发送Body是JSON的Post请求将JSON请求体以POST方式发送的代码也很简洁,如下:
实现原理该包实现的原理是利用了封装的思想。将复杂的操作封装到函数中,对外暴露接口供使用者调用。
在requests包中,最核心的是是一个Builder的结构。该结构体将请求的URL、请求的参数、http的客户端以及响应结果处理函数都封装在这里该结构体中。如下:
urlBuilder结构体的功能是构造请求的URLrequestBuilder结构体的功能是构造请求头、cookie、请求方法等信息http.Client是http请求的客户端ResponseHandler结构体的功能是处理请求的响应值。下图是ResjponseHandler结构体处理响应值的函数实现。能处理成JSON、文件、HTML等多种格式。
总结requensts包利用“封装”的思想,将复杂的处理操作封装到函数中,一是避免调用者编写重复的代码,提高效率;二是能够减少调用者出错的概率。在实际研发中,我们也可以借鉴其思想,将常用的操作封装起来,从而提高研发效率。
标签:
-
2023-06-14 10:22:03
「Go开源包」requests:一个比net/http包更简洁、高效的开源包<
大家好,这里是Go学堂。今天给大家推荐一个高效的HTTP的请求包:carlmj
-
2023-06-14 10:11:51
浙江慈溪:“千万工程”优胜县的“美丽蝶变”<
6月13日,空中俯瞰慈溪市周巷镇万安庄村(无人机照片)。该村位于浙江
-
2023-06-14 09:16:22
三亚启动“夏送清凉”维权关爱活动_每日关注<
原标题:三亚启动“夏送清凉”维权关爱活动(主题)惠及1 6万余名职工
-
2023-06-14 08:53:02
小盘科技股风险越来越大!<
今天的标题是提醒小盘科技股风险越来越大,绝对不是危言耸听,当然也不
-
2023-06-14 08:30:12
农发行推出27条政策服务农业强国建设<
新华社北京6月13日电(记者郁琼源、侯雪静)中国农业发展银行13日发
-
2023-06-14 10:22:03
「Go开源包」requests:一个比net/http包更简洁、高效的开源包
大家好,这里是Go学堂。今天给大家推荐一个高效的HTTP的请求包:carlmj
-
2023-06-14 10:11:51
浙江慈溪:“千万工程”优胜县的“美丽蝶变”
6月13日,空中俯瞰慈溪市周巷镇万安庄村(无人机照片)。该村位于浙江
-
2023-06-14 09:16:22
三亚启动“夏送清凉”维权关爱活动_每日关注
原标题:三亚启动“夏送清凉”维权关爱活动(主题)惠及1 6万余名职工
-
2023-06-14 08:53:02
小盘科技股风险越来越大!
今天的标题是提醒小盘科技股风险越来越大,绝对不是危言耸听,当然也不
-
2023-06-14 08:30:12
农发行推出27条政策服务农业强国建设
新华社北京6月13日电(记者郁琼源、侯雪静)中国农业发展银行13日发
-
2023-06-14 07:42:22
陕西渭南市文旅局局长妻子“吃空饷”?官方通报来了|世界微资讯
6月14日凌晨,“渭南发布”发布情况通报:针对6月12日网上反映我市文旅
-
2023-06-14 06:49:59
天天日报丨财政部今天将在香港发行120亿元人民币国债
财政部今天将在香港发行120亿元人民币国债
-
2023-06-14 05:37:14
十字绣回收成品店_焦点快报
十字绣可以说是有价无市,价钱是可以卖挺高的,但没人买 没有也不可能
-
2023-06-14 02:06:40
淮安马拉松(关于淮安马拉松介绍)
来为大家讲解以上的问题。淮安马拉松,安马拉松介绍这个很多人还不知道
-
2023-06-13 23:09:37
新龙骑士ol(关于新龙骑士ol的基本详情介绍)
1、GPK是一款由上海盛大网络公司(snda)全新推出的游戏保护工具,它可
-
2023-06-13 22:05:39
博士毕业论文致谢母亲冲上热搜 网友:读完已泪流满面……
又一博士论文致谢,被顶上热搜!近日话题 博士毕业论文900字致谢母亲
-
2023-06-13 21:02:19
上海凤凰:子公司华久辐条向镇江裕久提供的800万元委托贷款逾期 公司未及时公告
上海凤凰6月13日公告,公司全资子公司华久辐条于2021年分两次向镇江裕
-
2023-06-13 20:06:58
环球速看:还说5G没用?全国5G平均下行速率348Mbps 比4G快6倍
2023年第一季度全国移动网络质量监测报告”现已发布。2023年第一季度,
-
2023-06-13 19:16:40
意向协议5800万元 四川丝绸组团亮相中国国际丝绸博览会 滚动
原标题:意向协议5800万元四川丝绸组团亮相中国国际丝绸博览会6月10日
-
2023-06-13 18:38:24
2023年南陵奎湖龙舟赛举行几天?
南陵奎湖龙舟赛举行三天!一、许镇镇第二届端午民俗文化节时间及地点活
-
2023-06-13 17:55:52
全球快看点丨泰慕士: 2022年年度权益分派实施公告
泰慕士:2022年年度权益分派实施公告
-
2023-06-13 17:22:25
每日信息:从卫星看北半球野火肆虐 极端天气引人忧
加拿大森林火灾产生的大量烟霾持续向南扩散,已波及美国东海岸和中西部
-
2023-06-13 16:52:24
天天通讯!电脑不显示无线网络名称_电脑不显示无线网络
1、在计算机桌面上,右键单击本地连接打开网络和共享中心。2、在“共享
-
2023-06-13 16:05:29
美国商务部将31家中国实体列入管制清单,外交部回应
美国商务部将31家中国实体列入管制清单,外交部回应,外交部,汪文斌,美
-
2023-06-13 15:47:56
晋控煤业:公司目前以签署书面合同为主
每经AI快讯,有投资者在投资者互动平台提问:请问公司现在是采取何种方
-
2023-06-13 15:07:09
具备行车条件 北京地铁17号线歇甲村车辆段完成热滑试验 全球新要闻
6月12日,北京地铁17号线歇甲村车辆段热滑试验顺利完成,标志着歇甲村
-
2023-06-13 14:18:43
开源目光聚焦GreatSQL 万里数据库携GreatSQL社区重磅亮相2023全球开源峰会 全球今热点
6月11-13日,2023开放原子全球开源峰会开幕式暨高峰论坛在北京成功举办
-
2023-06-13 13:58:04
环球精选!心系老技艺——追风筝的传人
在天津市鼓楼附近的工作室里,魏博文在制作风筝骨架(6月8日摄)。被列
-
2023-06-13 13:09:29
江歌母亲:刘鑫不服二审判决申请再审 速看料
6月13日,江歌母亲江秋莲@苦咖啡-夏莲微博发文称,其收到山东省高级人
-
2023-06-13 12:21:45
焦点速讯:苹果官换机怎么识别真假(苹果官换机)
来为大家解答以下的问题,果官换机怎么识别真假,苹果官换机这个很多人
-
2023-06-13 11:55:27
股息率跑赢存款利率 四行业公司持续大手笔分红
多家银行集体下调存款利率成为近期市场关注的热点。权益市场方面,若以
-
2023-06-13 11:22:43
衣服缩水了怎么办 教你三招还原(衣服缩水怎么恢复秒招)
衣服缩水的恢复秒招当衣服缩小了想恢复原样,最好将衣服放在温水中浸泡
-
2023-06-13 10:48:46
板子怎么打(板子)|全球独家
近日来大家对于板子比较感兴趣,那么今天小D也是特地在网上收集了一些
-
2023-06-13 10:37:38
红米K60超大杯7月见
据最新爆料,红米K60系列即将推出超大杯——RedmiK60Ultra。该款手机将
-
2023-06-13 10:17:30
天天速读:6月13日广州港鱼粉市场继续上涨
,市场情绪增强,但交投一般。-饲料行业信息网