Middle — Middle+
Que abordagens existem para formar uma consulta SQL SELECT em tempo real com a possibilidade de alterar dinamicamente as condições e os parâmetros?
sobes.tech IA
Resposta da IA
Para a formação dinâmica de consultas SQL SELECT em Go, existem várias abordagens:
-
Concatenação de strings — a forma mais simples, mas insegura, sujeita a injeções SQL.
-
Utilização de consultas parametrizadas com pacotes
database/sqle passagem de argumentos através de?ou$1. -
Construtores de consultas (query builders) — bibliotecas que permitem formar consultas programaticamente com condições, ordenações, etc.
Exemplo usando a biblioteca Squirrel:
import (
"github.com/Masterminds/squirrel"
"database/sql"
_ "github.com/lib/pq"
)
func buildQuery(age int, active bool) (string, []interface{}, error) {
qb := squirrel.Select("id", "name").From("users")
if age > 0 {
qb = qb.Where(squirrel.Gt{"age": age})
}
if active {
qb = qb.Where(squirrel.Eq{"active": true})
}
return qb.ToSql()
}
func main() {
db, _ := sql.Open("postgres", "connection_string")
query, args, _ := buildQuery(30, true)
rows, _ := db.Query(query, args...)
defer rows.Close()
// processamento dos resultados
}
Este método permite adicionar condições e parâmetros de forma dinâmica, evitando erros e injeções SQL.
Também é possível usar ORM ou wrappers próprios para construir consultas.