bodyclose
1.0.0
bodyclose เป็นเครื่องมือวิเคราะห์แบบคงที่ซึ่งตรวจสอบว่า res.Body ปิดอย่างถูกต้องหรือไม่
คุณสามารถรับ bodyclose โดย go get รับคำสั่ง
$ go get -u github.com/timakin/bodyclose bodyclose Run กับ go vet ดังต่อไปนี้เมื่อ GO คือ 1.12 และสูงกว่า
$ 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 ตรวจสอบว่า *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.close เมื่ออ่านเสร็จสิ้น 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 )ใน godoc ของลูกค้าทำกฎนี้อธิบายไว้อย่างชัดเจน
หากคุณลืมประโยคนี้ไคลเอนต์ HTTP ไม่สามารถใช้การเชื่อมต่อ TCP แบบถาวรกับเซิร์ฟเวอร์อีกครั้งสำหรับคำขอ "Keep-Alive" ที่ตามมา