sqlrows est un analyseur de code statique qui aide à découvrir les bogues en signalant un diagnostic pour les erreurs d'utilisation de sql.Rows .
Vous pouvez obtenir sqlrows par la commande go get .
$ go get -u github.com/gostaticanalysis/sqlrows sqlrows fonctionne avec go vet comme ci-dessous lorsque GO est 1,12 et plus.
$ go vet -vettool= $( which sqlrows ) github.com/you/sample_api/... Lorsque GO est inférieur à 1,12, exécutez simplement la commande sqlrows avec le nom du package (chemin d'importation).
Mais il ne peut pas accepter certaines options telles que --tags .
$ sqlrows github.com/you/sample_api/... sqlrows vérifie une erreur courante lors de l'utilisation de *sql.Rows .
Au début, vous devez appeler rows.Close() dans une fonction de différence. Une connexion ne sera pas réutilisée si vous n'avez pas réussi à analyser les enregistrements et oublié de fermer *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.
}
} Et, si vous différez un appel de fonction pour fermer les *sql.Rows avant de vérifier l'erreur qui détermine si le retour est valide, cela signifie que vous appelez Dual 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
}Cela peut provoquer une référence de panique et de pointeur nil, mais il ne vous apprendra pas clairement qui leur est dû.