sqlx: сканирование структур и именованные запросы
Get, Select и NamedExec с sqlx
«sqlx: сканирование структур и именованные запросы» — бесплатный урок Go Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Go Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Go Academy содержит 4 уроков всего.
Что такое sqlx?
github.com/jmoiron/sqlx расширяет database/sql сканированием в структуры, именованными запросами и привязкой параметров внутри запроса. Этот пакет совместим с API database/sql.
sqlx.Open
Откройте соединение с базой данных с помощью sqlx вместо sql:
db, err := sqlx.Open("postgres", dsn)
if err != nil { log.Fatal(err) }Get и Select
db.Get сканирует одну строку в структуру; db.Select сканирует несколько строк в срез:
var user User
db.GetContext(ctx, &user, "SELECT * FROM users WHERE id=$1", id)
var users []User
db.SelectContext(ctx, &users, "SELECT * FROM users WHERE active=$1", true)Теги структур
sqlx сопоставляет столбцы с полями структуры, используя тег db:
type User struct {
ID int `db:"id"`
Name string `db:"name"`
Email string `db:"email"`
}Именованные запросы
Используйте именованные параметры в синтаксисе :name и передавайте структуру или карту:
query := "INSERT INTO users (name, email) VALUES (:name, :email)"
_, err := db.NamedExecContext(ctx, query, user)sqlx.In
sqlx.In разворачивает срез в условие SQL IN:
ids := []int{1, 2, 3}
query, args, _ := sqlx.In("SELECT * FROM users WHERE id IN (?)", ids)
query = db.Rebind(query)
db.SelectContext(ctx, &users, query, args...)Rebind
db.Rebind(query) преобразует заполнители ? (используемые sqlx.In) в формат, специфичный для драйвера ($1, $2 для PostgreSQL):
StructScan
Сканируйте отдельную строку в структуру с помощью rows.StructScan:
rows, _ := db.QueryxContext(ctx, "SELECT * FROM users")
for rows.Next() {
var u User
rows.StructScan(&u)
}MustExec
db.MustExec выполняет запрос и вызывает панику при ошибке — это удобно для миграций схемы или настройки тестов, где ошибки всегда приводят к завершению работы.
db.MustExec(schema)Unsafe
db.Unsafe() возвращает версию, которая молча игнорирует несопоставленные столбцы вместо возврата ошибки — это удобно, когда SELECT возвращает больше столбцов, чем в структуре есть полей.
sqlx и ORM
sqlx предоставляет полный контроль над SQL и привязку структур в стиле Go. ORM-системы, такие как GORM, скрывают SQL, но могут создавать неожиданные запросы. Используйте sqlx, когда Вам нужен явный SQL и удобное сканирование.
Быстрая проверка
Что делает db.SelectContext в sqlx?
Итоги: sqlx
Основные моменты:
- Get/Select сканируют данные непосредственно в структуры, используя теги db
- Именованные запросы с синтаксисом :name и NamedExecContext
- sqlx.In + Rebind для условия IN со срезами
- StructScan для построчного сканирования в структуры в циклах
Часто задаваемые вопросы
Урок «sqlx: сканирование структур и именованные запросы» бесплатный?
Да — полный текст урока «sqlx: сканирование структур и именованные запросы» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Go Academy, подпишись на CoddyKit PRO. Курс Go Academy содержит 4 уроков всего.
Чему я научусь в уроке «sqlx: сканирование структур и именованные запросы»?
Get, Select и NamedExec с sqlx Ты практикуешь Go Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Go Academy?
Предыдущий опыт не требуется. Go Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «sqlx: сканирование структур и именованные запросы»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Go Academy?
Да. Каждый урок Go Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- database/sql и драйверы
- sqlx: сканирование структур и именованные запросы
- pgx: высокопроизводительный драйвер PostgreSQL
- Транзакции и миграции