0Pricing
Go Academy · Урок

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 — локальная установка не требуется.

Все уроки этого курса

  1. database/sql и драйверы
  2. sqlx: сканирование структур и именованные запросы
  3. pgx: высокопроизводительный драйвер PostgreSQL
  4. Транзакции и миграции
← Назад к Go Academy