登录
首页 >  Golang >  Go问答

如何在 Go 中释放 http.Client?

来源:Golang技术栈

时间:2023-04-19 15:23:18 178浏览 收藏

偷偷努力,悄无声息地变强,然后惊艳所有人!哈哈,小伙伴们又来学习啦~今天我将给大家介绍《如何在 Go 中释放 http.Client?》,这篇文章主要会讲到golang等等知识点,不知道大家对其都有多少了解,下面我们就一起来看一吧!当然,非常希望大家能多多评论,给出合理的建议,我们一起学习,一起进步!

问题内容

我建立了一个http.Client用于 HTTP2 的连接,我需要做什么才能释放客户端和使用的资源?

正确答案

http.Client不需要任何特殊方式来释放“使用过的”资源。当它变得不可达时,它使用的内存将被垃圾收集器回收。

http.Client不存储连接或状态信息。文档甚至指出http.Client应该重用:

客户端的传输通常具有内部状态(缓存的 TCP 连接),因此客户端应该被重用,而不是根据需要创建。客户端可以安全地被多个 goroutine 并发使用。

如果您使用(例如嵌入)构建自己的客户端http.Client并分配必须显式释放的资源,请Close()在其上提供您自己的方法并记录使用您自己的实现的任何人在Close()不再需要时必须调用的文档。

笔记:

您可能会混淆的是,如果您使用 anhttp.Client来执行 HTTP 操作(如Client.Do()Client.Get()Client.Post()),它们会返回 的值*http.Response,并且该响应确实包含需要释放的连接、状态和其他 资源 ,通常通过Response.Body.Close(). 引用包文档http

客户端完成后必须关闭响应正文:

resp, err := http.Get("http://example.com/")
if err != nil {
  // handle error
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
// ...

它也记录在Client.Get()

当 err 为 nil 时,resp 总是包含一个非 nil 的 resp.Body。调用者在完成读取后应关闭 resp.Body。

好了,本文到此结束,带大家了解了《如何在 Go 中释放 http.Client?》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

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