sqlrows هو محلل رمز ثابت يساعد في اكتشاف الأخطاء من خلال الإبلاغ عن تشخيص عن أخطاء استخدام sql.Rows .
يمكنك الحصول على sqlrows عن طريق go get Command.
$ 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/... 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
}قد يتسبب ذلك في مرجع الذعر والذعر ، لكنه لن يعلمك بوضوح بسبب ذلك.