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 с именем пакета (PATH IMPART).
Но он не может принять некоторые варианты, такие как --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
}Это может привести к панике и ниль-указателю, но это не научит вас, что связано с ними.