sqlrows
1.0.0
sqlrows 、 sql.Rows使用のミスの診断を報告することにより、バグを明らかにするのに役立つ静的コードアナライザーです。
go getコマンドでsqlrows取得できます。
$ go get -u github.com/gostaticanalysis/sqlrowssqlrows 、Goが1.12以上の場合、 go vetで実行されます。
$ go vet -vettool= $( which sqlrows ) github.com/you/sample_api/... GOが1.12未満の場合は、パッケージ名(インポートパス)でsqlrowsコマンドを実行するだけです。
ただし、 --tagsなどのオプションを受け入れることはできません。
$ sqlrows github.com/you/sample_api/...sqlrows *sql.Rowsを使用すると、一般的な間違いをチェックします。
最初は、延期関数で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閉じるための関数呼び出しを延期すると、 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
}パニックとニルポインターの参照を引き起こす可能性がありますが、それが彼らによるものであることを明確に教えません。