为什么http请求完后要使用response.Body.Close()

背景

以下是常见的http请求逻辑,在错误检查后使用defer resp.Body.Close(),问题来了,response.Body是否必须关闭?不关闭会带来什么问题?

1
2
3
4
5
6
7
8
client := http.DefaultClient
resp, err := client.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
...

解析

如果请求后没有进行response.Body.Close(),会产生资源泄漏(一个连接占用一个文件描述符,不断开会产生大量无用的连接,浪费系统资源)

参考

What could happen if I don’t close response.Body in golang?