bodyclose é uma ferramenta de análise estática que verifica se res.Body está fechado corretamente.
Você pode obter bodyclose By go get Command.
$ go get -u github.com/timakin/bodyclose bodyclose Run With go vet como abaixo quando o Go é 1,12 e mais alto.
$ 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 Quando o GO for inferior a 1,12, basta executar o comando bodyclose com o nome do pacote (caminho de importação).
Mas não pode aceitar algumas opções, como --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 valida se *net/http.Response da solicitação HTTP Chamadas Method Body.Close() como o código abaixo.
resp , err := http . Get ( "http://example.com/" ) // Wrong case
if err != nil {
// handle error
}
body , err := ioutil . ReadAll ( resp . Body )Este código está errado. Você deve ligar para resp.body.close quando terminar de ler 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 )No Godoc do cliente. Esta regra está claramente descrita.
Se você esquecer esta frase, um cliente HTTP não poderá reutilizar uma conexão TCP persistente com o servidor para uma solicitação "Keep-Alive" subsequente.