Go: GORM
Теория: Установка и подключение к базе
Любая работа с GORM начинается с подключения к базе данных. Пока соединение не установлено, невозможно выполнить ни одну операцию: нельзя создать таблицу, сохранить запись или прочитать данные. Поэтому первым шагом становится установка самой библиотеки и драйвера для выбранной СУБД. В примерах удобно использовать PostgreSQL: эта база хорошо поддерживается GORM и часто встречается в реальных проектах, но тот же подход работает и для MySQL, SQLite и других систем.
GORM устроен как набор модулей. Основной пакет gorm.io/gorm содержит логику ORM: создание и миграцию таблиц, построение запросов, работу с хуками и транзакциями. Подключение к конкретной базе выполняет отдельный драйвер. Для PostgreSQL используется пакет gorm.io/driver``/postgres. Такая архитектура позволяет сохранять единый API и просто менять драйвер под нужную СУБД, не переписывая остальной код.
Установка выполняется стандартной командой Go. Достаточно добавить библиотеку и драйвер в зависимости проекта:
После выполнения этих команд пакеты попадут в go.mod, а приложение сможет импортировать их и использовать в исходном коде. С этого момента GORM готов к подключению к базе.
Простейшее подключение к PostgreSQL можно оформить в отдельном файле main.go. Код будет выглядеть так:
В строке dsn (Data Source Name) задаются параметры подключения: хост, порт, пользователь, пароль, имя базы и режим SSL. Функция gorm.Open() открывает подключение через драйвер postgres и возвращает объект *gorm.DB. Этот объект становится основным входом в GORM: через него создаются таблицы, выполняются запросы и управляются транзакции.
После подключения сразу можно создать таблицу по структуре модели. GORM использует механизм миграций AutoMigrate() и по описанию структуры строит подходящую схему:
В этом примере AutoMigrate() считывает поля структуры User и создаёт таблицу users с колонками id и name. При изменении структуры (например, при добавлении нового поля) GORM попытается аккуратно обновить схему. Такой механизм удобен на ранних этапах разработки, когда модель данных ещё активно меняется.
Чтобы понимать, какие запросы GORM выполняет на самом деле, важно включить логирование. Для этого используется пакет gorm.io/gorm/logger. Он выводит SQL, параметры, ошибки и время выполнения запросов. Пример настройки логгера через конфигурацию GORM выглядит так:
В таком режиме при каждом запросе GORM будет печатать текст SQL, количество затронутых строк и время выполнения. Это помогает увидеть реальную картину нагрузки, найти медленные места и понять, как ORM строит запросы под капотом.
Помимо логирования, важную роль играет настройка пула соединений. GORM использует стандартный пакет database/sql и создаёт пул подключений к базе. Управление этим пулом выполняется через метод DB() объекта *gorm.DB:
Такая настройка помогает удерживать баланс между производительностью и нагрузкой на базу. Пул не открывает бесконечное количество соединений и не держит их пожизненно, а работает по заданным ограничениям. В продакшене это особенно важно: правильные значения параметров позволяют выдерживать нагрузку и не исчерпывать ресурсы СУБД.
Дополнительные параметры GORM задаются через gorm.Config. Они позволяют тонко настроить поведение ORM. Например, можно отключить обёртку каждой операции в транзакцию и включить кэш подготовленных выражений:
SkipDefaultTransaction() ускоряет типовые операции, если транзакции контролируются на более высоком уровне. PrepareStmt() полезен в сервисах с повторяющимися запросами: подготовленные выражения переиспользуются, и база тратит меньше времени на разбор SQL.
Для проверки того, какой запрос GORM сформирует без реального выполнения, можно использовать сессию с параметром DryRun(). В этом режиме ORM строит SQL, но не отправляет его в базу:
DryRun() подходит для отладки сложных цепочек запросов и помогает убедиться, что GORM строит именно тот SQL, который ожидается, ещё до взаимодействия с реальной базой.
В итоге для запуска GORM достаточно двух пакетов: основного gorm.io/gorm и драйвера для СУБД, например gorm.io/driver/postgres. Далее подключение к базе сводится к строке DSN и вызову gorm.Open(), логгер делает работу ORM прозрачной, а настройки пула соединений и конфигурации gorm.Config помогают держать поведение под контролем. Такой набор шагов создаёт надёжную основу, на которой уже можно строить модели, миграции и бизнес-логику.



