sqlrows é um analisador de código estático que ajuda a descobrir bugs relatando um diagnóstico para erros do uso sql.Rows .
Você pode obter o comando sqlrows by go get .
$ go get -u github.com/gostaticanalysis/sqlrows sqlrows Run with go vet como abaixo quando o GO é 1,12 e mais alto.
$ go vet -vettool= $( which sqlrows ) github.com/you/sample_api/... Quando o GO for inferior a 1,12, basta executar o comando sqlrows com o nome do pacote (caminho de importação).
Mas não pode aceitar algumas opções, como --tags .
$ sqlrows github.com/you/sample_api/... sqlrows verifica um erro comum ao usar *sql.Rows .
No começo, você deve ligar para rows.Close() em uma função de adiamento. Uma conexão não será reutilizada se você inesperadamente falhou em digitalizar registros e esquecer de fechar *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.
}
} E, se você adiar uma chamada de função para fechar o *sql.Rows antes de verificar o erro que determina se o retorno é válido, isso significa que você ligará para ligue 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
}Pode causar referência de pânico e nulo, mas não ensinará claramente que seja devido a eles.