bodyclose
1.0.0
bodyclose res.Body 가 올바르게 닫혀 있는지 확인하는 정적 분석 도구입니다.
go get 명령으로 bodyclose 얻을 수 있습니다.
$ go get -u github.com/timakin/bodyclose bodyclose GO가 1.12 이상이면 아래와 같이 go vet 와 함께 실행됩니다.
$ 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 HTTP 요청의 *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를 읽을 때 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 클라이언트는 후속 "repoy-alive"요청을 위해 서버에 대한 지속적인 TCP 연결을 재사용 할 수 없습니다.