fan*_*ard 6 garbage-collection go
我http.Client为HTTP2 建立了一个连接,我需要做些什么才能释放使用的客户端和资源?
谢谢.
icz*_*cza 13
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:
完成后,客户端必须关闭响应正文:
Run Code Online (Sandbox Code Playgroud)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总是包含一个非零resp.Body.呼叫者在完成阅读后应该关闭resp.Body.
该CloseIdleConnections()方法是在 Go 1.12 中添加的。
https://golang.org/pkg/net/http/#Client.CloseIdleConnections
CloseIdleConnections 关闭其 Transport 上的所有连接,这些连接之前是通过之前的请求连接的,但现在处于“保持活动”状态的空闲状态。它不会中断当前正在使用的任何连接。