我有一个函数只是发出一个get请求来检查状态代码.它不会从身体上读取任何东西.我还应该结束这个功能resp.Body.Close()
吗?
呼叫者在完成阅读后应该关闭resp.Body.如果resp.Body未关闭,则客户端的基础RoundTripper(通常为Transport)可能无法重新使用到服务器的持久TCP连接以用于后续"保持活动"请求.
and*_*olm 21
是.当您调用http.Get时,只要读取了所有HTTP标头,该函数就会返回响应.尚未阅读回复的正文.Response.Body是与服务器的网络连接的包装器.当您从中读取时,它会下载响应的正文.
.Close()告诉系统您已完成网络连接.如果您尚未读取响应正文,则默认的http传输将关闭连接.(如果正在读取正文,则传输只能重新使用连接,因为如果它重用与未读主体的连接,则使用该连接发出的下一个请求将收到先前请求的响应!)
因此,如果您正在进行多个请求,那么阅读Body通常比简单的Close()更有效 - 特别是对于创建相对昂贵的TLS连接.
如果您不需要响应的主体,则应使用Head而不是Get.头部不需要读取或关闭响应体.