【发布时间】:2021-05-22 05:27:07
【问题描述】:
在 Go 中,我有一些 http 响应,但有时会忘记调用:
resp.Body.Close()
在这种情况下会发生什么?会不会有内存泄漏?获取响应对象后立即输入defer resp.Body.Close() 是否安全?
client := http.DefaultClient
resp, err := client.Do(req)
defer resp.Body.Close()
if err != nil {
return nil, err
}
如果出现错误怎么办,resp 或 resp.Body 可以为零吗?
【问题讨论】:
-
当存在 return 时,可以将 defer resp.Body.Close() 放在 err != nil 之后,因为当 err 不是 nil 时,它已经关闭。另一方面,当请求成功时,主体需要显式关闭。
标签: go