被 golang http 标准库蹂躏过的童鞋看过来

2019-08-22 09:30:40 +08:00
 guonaihong

苦逼的岁月

还记得以前晚上接到紧急需求,说要快速搞定。打开 vim 带上标准库,调试 http client multipart/form-data 格式 ,时间一分分过去,眼睛看代码越来越模糊,踩过至少 3 个坑。ok,啪!终于大功告成,这时候没人注意到你的傻笑,同事们都下班了。按下屏幕,走出大楼,背起书包,骑着小单车,听着外面的蝉叫声,拖着疲惫的身体回去睡觉。

再遇一次可以更快

为了避免再遇到这种苦逼的事情。从开发效率出发,优化 http client 调用方式。这就是下面的项目。

https://github.com/guonaihong/gout

6466 次点击
所在节点    编程
13 条回复
misaka19000
2019-08-22 09:33:46 +08:00
g.Get(url) 不是挺好的,为什么还要加个 .Do()
guonaihong
2019-08-22 09:44:55 +08:00
@misaka19000 为了设计成链式调用。
hhyvs111
2019-08-22 10:03:35 +08:00
想问一下 go 原生的 http 有时候会返回 EOF 错误,这个是什么原因呢?
alexkkaa
2019-08-22 10:18:15 +08:00
@hhyvs111 运营商阻断
Akkuman
2019-08-22 11:04:45 +08:00
感觉标准库都写出肌肉记忆了哈哈,用习惯了也还好,自己也踩过一些坑
hopingtop
2019-08-22 11:42:01 +08:00
再加入一些默认 http client 连接控制设置,重试等。 简单的 client 复用,会不会更美丽?
https://github.com/huzhongqing/httplib
guonaihong
2019-08-22 12:32:08 +08:00
@hhyvs111 http 下面的 tcp 链接被关闭,会报这个错误。可以用代码模拟的。
guonaihong
2019-08-22 12:32:35 +08:00
@Akkuman 厉害厉害。
guonaihong
2019-08-22 12:36:28 +08:00
@hopingtop 可以可以,兄弟还有别的需求吗?我后面加上。
hhyvs111
2019-08-22 14:04:49 +08:00
@guonaihong 什么情况下会被关闭呢?
guonaihong
2019-08-22 14:13:37 +08:00
@hhyvs111 对端异常终止(构造一个访问超级慢的 http client, 这时候把客户端 ctrl+c,这时候服务端就会收到 eof,反过来操作也行),或者 client 和 server 之间的通信节点有问题。
hhyvs111
2019-08-22 14:23:55 +08:00
@guonaihong 我在想为什么 go 的 http 库没有及时得知这个连接被关闭了?
guonaihong
2019-08-22 21:39:23 +08:00
@hhyvs111 这和调用方式,如果要做成通知形式,事件触发只能放到网络层,语言只能设计成 callback 的形式。比如 nodejs 这种。go 是同步写法,只在用户在调用 read 之类的函数才和网络层交互,这时候才可以收到错误。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/594066

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX