当前位置: 首页 > 面试题库 >

如何在Go中释放http.Client?

诸葛雨泽
2023-03-14
问题内容

我建立了一个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。



 类似资料:
  • 问题内容: 有没有一种类似于函数的释放Java内存的方法?还是将对象设置为null并依靠GC是唯一的选择? 问题答案: Java使用托管内存,因此分配内存的唯一方法是使用运算符,而释放内存的唯一方法是依靠垃圾回收器。 该内存管理白皮书(PDF)可能有助于解释发生了什么。 你还可以致电建议垃圾收集器立即运行。但是,Java Runtime做出最终决定,而不是你的代码。 根据Java文档, 调用gc方

  • 问题内容: 我遵循了Go Writing Web Applications 教程,但是无论出于什么原因,我都很难使该应用程序能够服务CSS和JS。如果我在没有Go服务器的情况下运行静态页面,则页面CSS可以正常工作。另一方面,当我运行Go服务器时,CSS无效。 这是我的HTML外观: 然后在标记下: 我的文件树如下所示: 如何获得Go应用程序以提供所需的CSS和JavaScript? 此问题已经解

  • 我的问题类似于这个问题MySQL在连接丢失/断开的情况下回滚事务,但那是5年前的事了。 如果一个客户端(比如jdbc或其他什么)锁定了表中的一行,执行一些语句,那么网络就关闭了,所以mysql永远不会从客户端收到或命令,mysql是否支持自动回滚这个事务(解锁行)? 我引用它说,但是有多长时间以及在哪里设置它? 在类似的问题中,公认的答案是使用,如果设置为10秒这样的小数字,那么池中的空闲连接(如

  • 问题内容: 我编写了一个Python程序,该程序作用于大型输入文件,以创建代表三角形的数百万个对象。该算法是: 读取输入文件 处理文件并创建一个三角形列表,以其顶点表示 以OFF格式输出顶点:顶点列表,后跟三角形列表。三角形由顶点列表中的索引表示 在打印出三角形之前必须先打印出完整的顶点列表的OFF要求意味着在将输出写入文件之前,必须将三角形的列表保留在内存中。同时,由于列表的大小,我遇到了内存错

  • 知道怎么释放5432端口吗?

  • 问题内容: 在以下示例中,我有一些有关内存使用的相关问题。 如果我在解释器中运行, 我的机器上使用的实际内存最高为80.9mb。那我 实际内存下降,但仅限于。解释器使用基线,因此不向 释放内存有什么好处?是否因为Python正在“提前计划”,以为你可能会再次使用那么多的内存? 它为什么特别释放- 释放的量基于什么? 有没有一种方法可以强制Python释放所有已使用的内存(如果你知道不会再使用那么多