Back to questions
Middle — Middle+
84
Какие подходы существуют для формирования SQL-запроса SELECT на лету с возможностью динамического изменения условий и параметров?
Companies where asked
Кадровое агентство BWG
Answer from AI
sobes.tech AI
Для динамического формирования SQL-запроса SELECT в Go существуют несколько подходов:
-
Конкатенация строк — самый простой, но небезопасный способ, подверженный SQL-инъекциям.
-
Использование параметризованных запросов с пакетами
database/sqlи передачей аргументов через?или$1. -
Строители запросов (query builders) — библиотеки, которые позволяют программно формировать запросы с условиями, сортировками и т.д.
Пример с использованием библиотеки 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()
// обработка результатов
}
Такой подход позволяет динамически добавлять условия и параметры, избегая ошибок и SQL-инъекций.
Также можно использовать ORM или собственные обертки для построения запросов.