......
resp, err := httplib.Get(url)
if err != nil {
fmt.Println(err)
}
defer resp.Body.Close()
......
Run Code Online (Sandbox Code Playgroud)
是否有必要每次关闭响应机构?
What happens if we do not close the response body ?
这是资源泄漏。它可以保持打开状态并且客户端连接不会被重用。
建议检查错误后立即关闭。
client := http.DefaultClient
resp, err := client.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
Run Code Online (Sandbox Code Playgroud)
来自 http.Client 文档:
如果返回的错误为零,则响应将包含一个非零的正文,用户应关闭该正文。如果正文未读取到 EOF 并关闭,则客户端的底层 RoundTripper(通常为 Transport)可能无法重新使用与服务器的持久 TCP 连接来进行后续的“保持活动”请求。
请求正文如果非零,将被底层传输关闭,即使出现错误也是如此。
什么是往返?
它是一个 Transport,指定发出单个 HTTP 请求的机制。如果为 nil,则使用 DefaultTransport。