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
}这可能会引起恐慌和尼尔零件参考,但不会清楚地教给您。