登录
首页 >  Golang >  Go问答

何时不关闭响应体

来源:stackoverflow

时间:2024-02-12 10:36:23 287浏览 收藏

一分耕耘,一分收获!既然都打开这篇《何时不关闭响应体》,就坚持看下去,学下去吧!本文主要会给大家讲到等等知识点,如果大家对本文有好的建议或者看到有不足之处,非常欢迎大家积极提出!在后续文章我会继续更新Golang相关的内容,希望对大家都有所帮助!

问题内容

golang 要求在用户代码中关闭 http 请求的响应正文,以释放资源:

client := http.DefaultClient
resp, err := client.Do(req)
if err != nil {
    return nil, err
}
defer resp.Body.Close()

我的问题是:为什么要这样设计?在某些情况下,不关闭是有益的吗?为什么标准库不为用户关闭 client.do(req) 内的连接?

我问这个问题是因为我经常在审查代码时发现这是一个陷阱。


正确答案


您从服务器接收的内容没有大小限制。您可能正在下载一个非常大的文件。这就是响应包含读取器的原因:这样您就可以流式传输响应。

由于您可以流式传输响应,因此您必须在完成后或当您对其余结果不感兴趣时​​关闭流。当您关闭流时,服务器会知道您不再有兴趣接收流的其余部分,并且它将有机会进行清理。

本篇关于《何时不关闭响应体》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>