如何在Go中释放http.Client?
我建立了一个http.Client
用于HTTP2的连接,我该怎么做才能释放客户端和使用的资源?
回答:
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 {
// 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? 的全部内容, 来源链接: utcz.com/qa/399038.html