go 里面的 http response body 必须 close 是不是很不合理呀

2024-01-31 17:18:09 +08:00
 zihuyishi
基本上每个新人写 http 请求都容易忘记这个,然后造成 goroutine 的泄漏。所以 http 请求基本都要实现一个 util 避免这种事情。
然后就是 close 在 Response.Body 上而不是 Response 本身,直觉上 close response 更符合普遍的逻辑吧。虽然可以理解是因为 body 和 response 生命周期不一样,但是用起来还是感觉不太协调
4441 次点击
所在节点    Go 编程语言
47 条回复
ihciah
2024-02-01 15:55:46 +08:00
从设计上主要原因是 http 协议和客户端是两阶段读的。Response 读完 header 就可以返回,body 可以读或者不读。读不读也会影响连接管理,所以无论如何都需要一个显式关闭能力。
至于为啥要手动关,那是语言本身问题,还是没析构函数/drop 的原因。
thynson
2024-02-01 17:50:09 +08:00
没有 RAII 的语言可不是要手动关闭嘛。
hotsymbol
2024-02-01 19:48:58 +08:00
赶紧换 Rust ,Go 一堆历史遗留问题。只能平替 Python ,这些 web server 还是得交给 rust 和 Java
lasuar
2024-02-02 11:26:22 +08:00
go 的 net 库算是 low-level ,需要暴露这个方法。
avrilko
2024-02-02 14:20:48 +08:00
rust 适合你
pluto1
2024-02-02 16:37:23 +08:00
@gamexg 那应该是我记错了,我总记得我有次好像遇到过 Close 一个 nil 对象导致 panic 的,可能不是在 http 这边
sampeng
364 天前
也没啥问题吧。。。新手?踩 1-2 次雷不就知道了。。

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

https://tanronggui.xyz/t/1013181

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

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

© 2021 V2EX