登录
首页 >  Golang >  Go问答

关闭 Go HTTP 包中的 Response Body 的原因是什么?

来源:stackoverflow

时间:2024-03-14 21:30:28 217浏览 收藏

欢迎各位小伙伴来到golang学习网,相聚于此都是缘哈哈哈!今天我给大家带来《关闭 Go HTTP 包中的 Response Body 的原因是什么?》,这篇文章主要讲到等等知识,如果你对Golang相关的知识非常感兴趣或者正在自学,都可以关注我,我会持续更新相关文章!当然,有什么建议也欢迎在评论留言提出!一起学习!

问题内容

请参阅此处的示例 https://pkg.go.dev/net/http#example-get。下面也有截图:

func main() {
    res, err := http.Get("http://www.google.com/robots.txt")
    if err != nil {
        log.Fatal(err)
    }
    body, err := io.ReadAll(res.Body)
    res.Body.Close() // Why!?
    if res.StatusCode > 299 {
        log.Fatalf("Response failed with status code: %d and\nbody: %s\n", res.StatusCode, body)
    }
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("%s", body)
}

我的问题是:为什么我需要关闭第7行的res.body.close()。我没有打开它。我在如果我不关闭response.body会发生什么?中看到了解释。我明白文档是这么说的。

有没有更好的方法来解决这个问题?

我认为这违反了开闭原则。我认为如果 readall 打开了 steam,它应该将其关闭。 go 中通常是这样完成这些事情的吗?


正确答案


来自 http.Client Do() 文档:

简而言之,如果您不遵循此建议,您将在执行请求时在程序中累积“死”http 连接 - 但永远不会清理和/或重用。随着时间的推移,您的程序性能将会下降 - 并且根据生成的连接数量 - 您可能会耗尽有限的资源,例如处理网络连接的文件描述符。

到这里,我们也就讲完了《关闭 Go HTTP 包中的 Response Body 的原因是什么?》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

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