SQLVET realiza un análisis estático en consultas SQL sin procesar en su base de código GO a los errores de tiempo de ejecución potencial de superficie en el momento de la compilación.
Lo más destacado de la característica:
HACER:
Vaya menos de 1.18:
$ go get github.com/houqp/sqlvetVaya más grande o igual 1.18:
$ go install github.com/houqp/sqlvet@latestSQLVET debería funcionar fuera de la caja para cualquier proyecto GO usando módulos GO:
$ sqlvet .
[!] No schema specified, will run without table and column validation.
Checked 10 SQL queries.
? Everything is awesome!
Nota: Se omitirá el código inalcanzable.
Para habilitar un análisis más en profundidad, cree un archivo de configuración sqlvet.toml en la raíz de su proyecto y especifique la ruta a un archivo de esquema de la base de datos:
$ cat ./sqlvet.toml
schema_path = "schema/full_schema.sql"
$ sqlvet .
Loaded DB schema from schema/full_schema.sql
table alembic_version with 1 columns
table incident with 13 columns
table usr with 4 columns
Exec @ ./pkg/incident.go:75:19
UPDATE incident SET oops = $1 WHERE id = $2
ERROR: column `oops` is not defined in table `incident`
Checked 10 SQL queries.
Identified 1 errors.
Por defecto, SQLVET verifica todas las llamadas a la función de consulta en database/sql , github.com/jmoiron/sqlx , github.com/jinzhu/gorm y bibliotecas go-gorp/gorp . Sin embargo, puede configurarlo en funciones de consulta arbitraria de la lista blanca como a continuación:
[[ sqlfunc_matchers ]]
pkg_path = " github.com/mattermost/gorp "
[[ sqlfunc_matchers . rules ]]
query_arg_name = " query "
query_arg_pos = 0
[[ sqlfunc_matchers . rules ]]
query_arg_name = " sql "
query_arg_pos = 0 La configuración anterior le dice a SQLVET que analice cualquier función/método desde github.com/mattermost/gorp paquete que tenga el primer parámetro llamado query o sql .
También puede igualar las funciones de consulta por nombres:
[[ sqlfunc_matchers ]]
pkg_path = " github.com/jmoiron/sqlx "
[[ sqlfunc_matchers . rules ]]
func_name = " NamedExecContext "
query_arg_pos = 1 La configuración anterior le dice a SQLVET que analice el segundo parámetro de cualquier función/método llamado NamedExecContext en github.com/jmoiron/sqlx paquete.
Para omitir un falso positivo, anotar la línea relevante con sqlvet: ignore el comentario:
func foo () {
Db . Query ( fmt . Sprintf ( "SELECT %s" , "1" )) // sqlvet: ignore
}SQLVET se inspiró en SafeSQL y SQLC.