还记得以前晚上接到紧急需求,说要快速搞定。打开 vim 带上标准库,调试 http client multipart/form-data 格式 ,时间一分分过去,眼睛看代码越来越模糊,踩过至少 3 个坑。ok,啪!终于大功告成,这时候没人注意到你的傻笑,同事们都下班了。按下屏幕,走出大楼,背起书包,骑着小单车,听着外面的蝉叫声,拖着疲惫的身体回去睡觉。
为了避免再遇到这种苦逼的事情。从开发效率出发,优化 http client 调用方式。这就是下面的项目。
1
misaka19000 2019-08-22 09:33:46 +08:00
g.Get(url) 不是挺好的,为什么还要加个 .Do()
|
2
guonaihong OP @misaka19000 为了设计成链式调用。
|
3
hhyvs111 2019-08-22 10:03:35 +08:00
想问一下 go 原生的 http 有时候会返回 EOF 错误,这个是什么原因呢?
|
5
Akkuman 2019-08-22 11:04:45 +08:00
感觉标准库都写出肌肉记忆了哈哈,用习惯了也还好,自己也踩过一些坑
|
6
hopingtop 2019-08-22 11:42:01 +08:00 1
再加入一些默认 http client 连接控制设置,重试等。 简单的 client 复用,会不会更美丽?
https://github.com/huzhongqing/httplib |
7
guonaihong OP @hhyvs111 http 下面的 tcp 链接被关闭,会报这个错误。可以用代码模拟的。
|
8
guonaihong OP @Akkuman 厉害厉害。
|
9
guonaihong OP @hopingtop 可以可以,兄弟还有别的需求吗?我后面加上。
|
10
hhyvs111 2019-08-22 14:04:49 +08:00
@guonaihong 什么情况下会被关闭呢?
|
11
guonaihong OP @hhyvs111 对端异常终止(构造一个访问超级慢的 http client, 这时候把客户端 ctrl+c,这时候服务端就会收到 eof,反过来操作也行),或者 client 和 server 之间的通信节点有问题。
|
12
hhyvs111 2019-08-22 14:23:55 +08:00
@guonaihong 我在想为什么 go 的 http 库没有及时得知这个连接被关闭了?
|
13
guonaihong OP @hhyvs111 这和调用方式,如果要做成通知形式,事件触发只能放到网络层,语言只能设计成 callback 的形式。比如 nodejs 这种。go 是同步写法,只在用户在调用 read 之类的函数才和网络层交互,这时候才可以收到错误。
|