Sobes.tech
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:

  1. Concatenação de strings — a forma mais simples, mas insegura, sujeita a injeções SQL.

  2. Utilização de consultas parametrizadas com pacotes database/sql e passagem de argumentos através de ? ou $1.

  3. 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.