http - 如果我不需要响应,是否需要 resp.Body.Close()?
问题描述
我正在提出不需要回应的请求。如果我这样做会导致任何问题吗?
client = &http.Client{
Timeout: time.Duration(15 * time.Second),
}
...
...
_, err := client.Do(req)
解决方案
引用文档Client.Do()
如果返回的错误为 nil,则 Response 将包含一个非 nil Body,用户应该关闭它。如果 Body 没有被读取到 EOF 并关闭,则客户端的底层 RoundTripper(通常是 Transport)可能无法重新使用与服务器的持久 TCP 连接来进行后续的“保持活动”请求。
所以是的,如果没有错误,你总是必须关闭它。您还应该在关闭之前将正文阅读到 EOF。引自http.Response
:
// The default HTTP client's Transport may not // reuse HTTP/1.x "keep-alive" TCP connections if the Body is // not read to completion and closed.
如果你不需要身体,你可以像这样丢弃它:
resp, err := client.Do(req)
if err != nil {
// handle error and return
return
}
defer resp.Close()
io.Copy(ioutil.Discard, resp.Body)
如果有错误,请参阅相关问题:如果调用http.Get(url)发生错误,我们是否需要关闭响应对象?
推荐阅读
- javascript - 如何“捕捉”console.error()?(所以标题)
- windows - 在批处理脚本中读取文件时出错
- windows - 尝试访问文件时出现“这不再位于 XXXX。验证项目的位置并重试”错误
- java - 如何使用硒打开页脚中的链接
- c++ - 了解 C/C++ 位域的底层类型
- c# - 异步运行 * 运算符并取消它
- certificate - 有没有办法通过 CertUtil 命令行更新存储在 Windows 证书存储的个人证书中的 p12 文件?
- sql - 如何在 sql 中找到“inteval”?
- reactjs - 显示警报并使用状态将其删除
- excel - Excel - “参考”