bodyclose es una herramienta de análisis estático que verifica si res.Body está correctamente cerrado.
Puedes obtener el comando bodyclose por go get .
$ go get -u github.com/timakin/bodyclose bodyclose Run With go vet como se muestra a continuación cuando GO es 1.12 y más 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 Cuando GO es inferior a 1.12, simplemente ejecute el comando bodyclose con el nombre del paquete (ruta de importación).
Pero no puede aceptar algunas opciones, 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 si *net/http. Respuesta del método de llamadas de solicitud HTTP Body.Close() como el código a continuación.
resp , err := http . Get ( "http://example.com/" ) // Wrong case
if err != nil {
// handle error
}
body , err := ioutil . ReadAll ( resp . Body )Este código está mal. Debe llamar a resp.body.clar cuando termine de leer 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 )En el Godoc del cliente. Esta regla se describe claramente.
Si olvida esta oración, un cliente HTTP no puede reutilizar una conexión TCP persistente al servidor para una solicitud posterior de "mantener alive".