bodyclose
1.0.0
bodyclose 、 res.Bodyが正しく閉じられているかどうかをチェックする静的分析ツールです。
go get Commandでbodyclose取得できます。
$ go get -u github.com/timakin/bodycloseGoが1.12以上の場合、 go vetを使用してbodyclose Run。
$ 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 closedbodyclose 、 *net/http.Response of 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を読み終えたら、resp.body.closeに電話する必要があります。
resp , err := http . Get ( "http://example.com/" )
if err != nil {
// handle error
}
defer resp . Body . Close () // OK
body , err := ioutil . ReadAll ( resp . Body )クライアントのgodocでは、このルールについて明確に説明してください。
この文を忘れた場合、HTTPクライアントは、後続の「キープアライブ」リクエストのために、サーバーへの永続的なTCP接続を再利用できません。