sqlrows es un analizador de código estático que ayuda a descubrir errores al informar un diagnóstico para errores del uso de sql.Rows .
Puede obtener el comando sqlrows by go get .
$ go get -u github.com/gostaticanalysis/sqlrows sqlrows se ejecutan con go vet como se muestra a continuación cuando GO es 1.12 y más alto.
$ go vet -vettool= $( which sqlrows ) github.com/you/sample_api/... Cuando GO es inferior a 1.12, simplemente ejecute el comando sqlrows con el nombre del paquete (ruta de importación).
Pero no puede aceptar algunas opciones, como --tags .
$ sqlrows github.com/you/sample_api/... sqlrows verifica un error común cuando se usa *sql.Rows .
Al principio, debe llamar rows.Close() en una función de diferir. No se reutilizará una conexión si inesperadamente no escanea los registros y olvidó cerrar *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.
}
} Y, si difiere una llamada de función para cerrar el *sql.Rows antes de verificar el error que determina si la devolución es válida, significará que llame dualmente 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
}Puede causar la referencia de pánico y nil-pointer, pero no le enseñará claramente que se deba a ellos.