sqlrows
1.0.0
sqlrows是一種靜態代碼分析儀,通過報告sql.Rows的錯誤診斷來幫助發現錯誤。
您可以通過go get命令獲得sqlrows 。
$ go get -u github.com/gostaticanalysis/sqlrows sqlrows用go vet運行,如下所示,GO為1.12且更高。
$ go vet -vettool= $( which sqlrows ) github.com/you/sample_api/...當GO低於1.12時,只需使用軟件包名稱(導入路徑)運行sqlrows命令。
但是它不能接受一些選項,例如--tags 。
$ sqlrows github.com/you/sample_api/...使用*sql.Rows時, sqlrows會檢查一個常見的錯誤。
首先,您必須在延期函數中調用rows.Close() 。如果您出乎意料地掃描記錄並忘記關閉*sql.Rows則不會重複使用連接。
rows , err := db . QueryContext ( ctx , "SELECT * FROM users" )
if err != nil {
return nil , err
}
for rows . Next () {
err = rows. Scan ( ... )
if err != nil {
return nil , err // NG: this return will not release a connection.
}
}而且,如果您將函數調用推遲以關閉*sql.Rows然後檢查確定返回是否有效的錯誤,則表示您dile dally call call rows.Close() 。
rows , err := db . QueryContext ( ctx , "SELECT * FROM users" )
defer rows . Close () // NG: using rows before checking for errors
if err != nil {
return nil , err
}這可能會引起恐慌和尼爾零件參考,但不會清楚地教給您。