bodyclose - это статический инструмент анализа, который проверяет, правильно ли закрыт res.Body .
Вы можете получить bodyclose от go get Command.
$ go get -u github.com/timakin/bodyclose bodyclose бежит с go vet как ниже, когда GO - 1,12 и выше.
$ go vet -vettool= $( which bodyclose ) github.com/timakin/go_api/...
# github.com/timakin/go_api
internal/httpclient/httpclient.go:13:13: response body must be closed Когда go будет ниже 1,12, просто запустите команду bodyclose с именем пакета (путь импорта).
Но он не может принять некоторые варианты, такие как --tags .
$ bodyclose github.com/timakin/go_api/...
~ /go/src/github.com/timakin/api/internal/httpclient/httpclient.go:13:13: response body must be closed bodyclose проверяет, является ли *net/http. -response http -запросов вызовы метода Body.Close() , как код ниже.
resp , err := http . Get ( "http://example.com/" ) // Wrong case
if err != nil {
// handle error
}
body , err := ioutil . ReadAll ( resp . Body )Этот код неверен. Вы должны позвонить в resp.body.close, когда закончите чтение Resp.body.
resp , err := http . Get ( "http://example.com/" )
if err != nil {
// handle error
}
defer resp . Body . Close () // OK
body , err := ioutil . ReadAll ( resp . Body )В Годоке клиента. Это правило четко описано.
Если вы забудете это предложение, клиент HTTP не может повторно использовать постоянное TCP-соединение с сервером для последующего запроса «Keep-Alive».