sqlrows adalah penganalisa kode statis yang membantu mengungkap bug dengan melaporkan diagnostik untuk kesalahan penggunaan sql.Rows .
Anda bisa mendapatkan sqlrows BY go get Command.
$ go get -u github.com/gostaticanalysis/sqlrows sqlrows dijalankan dengan go vet seperti di bawah saat Go adalah 1,12 dan lebih tinggi.
$ go vet -vettool= $( which sqlrows ) github.com/you/sample_api/... Ketika Go lebih rendah dari 1.12, cukup jalankan perintah sqlrows dengan nama paket (jalur impor).
Tetapi tidak dapat menerima beberapa opsi seperti --tags .
$ sqlrows github.com/you/sample_api/... sqlrows memeriksa kesalahan umum saat menggunakan *sql.Rows .
Pada awalnya, Anda harus memanggil rows.Close() dalam fungsi penundaan. Koneksi tidak akan digunakan kembali jika Anda secara tak terduga gagal memindai catatan dan lupa menutup *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.
}
} Dan, jika Anda menunda panggilan fungsi untuk menutup *sql.Rows sebelum memeriksa kesalahan yang menentukan apakah pengembalian valid, itu berarti Anda memanggil 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
}Ini dapat menyebabkan referensi panik dan nil-pointer tetapi tidak akan mengajarkan Anda dengan jelas karena mereka.