我建立了一个http.Client用于HTTP2的连接,我该怎么做才能释放客户端和使用的资源?
http.Client
http.Client不需要任何特殊方法来释放“已用”资源。当它变得不可访问时,垃圾收集器将回收它使用的内存。
http.Client不存储连接或状态信息。该文档甚至指出http.Client应重用:
客户端的传输通常具有内部状态(缓存的TCP连接),因此应重新使用客户端,而不是根据需要创建客户端。客户端可以安全地被多个goroutine并发使用。
如果使用(例如,嵌入)构建自己的客户端,http.Client并分配必须显式释放的资源,请Close()在其上提供自己的方法,并记录使用自己的实现的任何人都必须调用Close()该方法(如果不再需要该调用)。
Close()
注意:
你可能会混淆的是,如果你使用一个http.Client做HTTP操作(如Client.Do(),Client.Get(),Client.Post()等),它们返回的值*http.Response,以及响应不保持连接,状态和其他资源,这 确实 需要被释放,通常通过Response.Body.Close()。引用以下软件包的文档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) // ...
完成后,客户端必须关闭响应主体:
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。