首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Go中发布http.Client?

如何在Go中发布http.Client?
EN

Stack Overflow用户
提问于 2016-04-18 16:15:26
回答 2查看 10.5K关注 0票数 8

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-18 16:31:53

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

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

TCP客户端的传输通常具有内部状态(缓存的

连接),因此应该重用客户端,而不是根据需要创建客户端。多个goroutine并发使用客户端是安全的。

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

备注:

你可能会混淆的是,如果你使用一个http.Client来做HTTP操作(如Client.Do()Client.Get()Client.Post()等),它们会返回一个值*http.Response,并且该响应确实保存了一个连接,状态和其他资源,需要释放这些资源,通常是通过Response.Body.Close()。引用自http的包文档

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

resp,err := http.Get("http://example.com/") if err != nil { //处理错误}延迟resp.Body.Close()正文,err := ioutil.ReadAll(resp.Body) // ...

Client.Get()上也有相关文档

当err为nil时,

始终包含非nil的resp.Body。调用者应在完成读取后关闭resp.Body。

票数 22
EN

Stack Overflow用户

发布于 2019-11-05 01:10:35

CloseIdleConnections()方法是在Go 1.12中添加的。

https://golang.org/pkg/net/http/#Client.CloseIdleConnections

CloseIdleConnections关闭其传输上的所有连接,这些连接以前是从先前的请求连接的,但现在处于空闲状态,处于“保持活动”状态。它不会中断当前正在使用的任何连接。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36688633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档