即使我不读http请求的响应体,是否也需要关闭它?

Rus*_*tam 3 go go-http

我有以下代码:

resp, err = http.Head("http:something.com")
if err != nil {
    //do something
}

if resp.StatusCode == http.StatusOK {
    // do something     
}
Run Code Online (Sandbox Code Playgroud)

由于我没有阅读 的正文,因此resp我假设我不需要像 那样关闭它resp.Body.Close()。我的假设正确吗还是我应该打电话resp.Body.Close()

icz*_*cza 8

http.Head()是一个包装器,围绕它DefaultClient.Head()发出Client.Do()哪些文档:

如果返回的错误为 nil,则 Response 将包含一个非 nil Body,用户应关闭该 Body。如果正文未读取到 EOF 并关闭,则客户端的底层 RoundTripper(通常为 Transport)可能无法重新使用与服务器的持久 TCP 连接来进行后续的“保持活动”请求。

这应该足以让您关闭它。

即使您使用 HTTP HEAD 方法,这也只是对服务器的“推荐”。不符合 RFC 的服务器可能会返回一个正文,即使它不应该返回(对于 HEAD 请求),并且 Go 的net/http库可能会通过Response.Body. 所以你应该关闭它。即使没有尸体被发送或呈现给您,关闭它也没有什么坏处。