bodyclose est un outil d'analyse statique qui vérifie si res.Body est correctement fermé.
Vous pouvez obtenir bodyclose par la commande go get .
$ go get -u github.com/timakin/bodyclose bodyclose fonctionne avec go vet comme ci-dessous lorsque GO est de 1,12 et plus.
$ 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 Lorsque GO est inférieur à 1,12, exécutez simplement la commande bodyclose avec le nom du package (chemin d'importation).
Mais il ne peut pas accepter certaines options telles que --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 valide si * net / http.Response de la méthode des appels de demande http Body.Close() comme le code ci-dessous.
resp , err := http . Get ( "http://example.com/" ) // Wrong case
if err != nil {
// handle error
}
body , err := ioutil . ReadAll ( resp . Body )Ce code est faux. Vous devez appeler resp.body.close lorsque vous avez fini de lire 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 )Dans le Godoc du client. Cette règle est clairement décrite.
Si vous oubliez cette phrase, un client HTTP ne peut pas réutiliser une connexion TCP persistante au serveur pour une demande "Keep-Alive" ultérieure.