在这篇文章中,指出response.Body应该被关闭,以避免资源泄漏。 它也显示在在概览例子HTTP包godoc 。
在我的测试代码,我发送多个请求,试图与API
resp, err := http.DefaultClient.Do(req)
多次在相同的功能。 这是一个不好的做法? 在这种情况下,我写defer resp.Body.Close()
他们每个人之后,或者只是一次?
url := server.URL + "/ticket/add"
reader = strings.NewReader(`{"id": "test1", "detail": "test1"}`)
req, err := http.NewRequest("POST", url, reader)
assert.Nil(t, err)
resp, err := http.DefaultClient.Do(req)
assert.Nil(t, err)
defer resp.Body.Close()
assert.Equal(t, http.StatusCreated, resp.StatusCode)
// add a ticket with same id
reader = strings.NewReader(`{"id": "test1"}`)
req, err = http.NewRequest("POST", url, reader)
assert.Nil(t, err)
resp, err = http.DefaultClient.Do(req)
assert.Nil(t, err)
assert.Equal(t, http.StatusInternalServerError, resp.StatusCode)
一个相关的问题,在服务器端,即内部func(w http.ResponseWriter, r *http.Request)
是否有必要关闭请求主体呢?