← Ко всем open source проектам

GORM

go-gorm/gorm

GORM — ORM-библиотека для Go с ассоциациями, хуками, транзакциями и расширяемой моделью.

Форки 4,154
Автор go-gorm
Язык Go
Лицензия MIT
Обновлено 2026-06-27

Что это такое

GORM — ORM-библиотека для Go. Она помогает описывать модели, связи и запросы на уровне Go-кода, не отказываясь полностью от возможностей SQL.

Проект нацелен на удобство разработчика: ассоциации, хуки, предзагрузка, транзакции, пакетные вставки, SQL Builder, upsert и режимы вроде DryRun собраны в одном инструменте.

Для Go-сообщества это заметный проект, потому что язык часто поощряет явный код, а GORM предлагает более высокоуровневую модель работы с данными.

Что внутри

GORM поддерживает связи Has One, Has Many, Belongs To, Many To Many, полиморфные связи и наследование через одну таблицу. Это закрывает большую часть обычных доменных моделей.

Хуки до и после создания, сохранения, обновления, удаления и поиска позволяют встроить бизнес-правила рядом с жизненным циклом модели.

Отдельно важны транзакции, вложенные транзакции, Save Point, RollbackTo, работа с Context, подготовленными выражениями и пакетными операциями. Это делает библиотеку полезной не только для маленьких CRUD-страниц.

Как используют

GORM обычно берут в сервисах, где много повторяющейся работы с таблицами: пользователи, заказы, настройки, платежные записи, журналы событий и связанные сущности.

Библиотека помогает быстро двигаться на этапе продукта, потому что типовые запросы и связи пишутся короче. При этом для сложных мест можно использовать SQL-выражения и подсказки оптимизатора.

Ограничение в том, что ORM может спрятать стоимость запроса. Если не следить за предзагрузкой, индексами и количеством обращений к базе, удобный код легко станет медленным.

Схема модели

Пример в нейтральном формате показывает, что обычно описывает GORM: структуру модели, связь и явное поле внешнего ключа.

Сильные стороны и ограничения

Сильная сторона GORM — богатый набор возможностей вокруг реальных приложений: связи, транзакции, пакетная обработка, расширения для нескольких баз и метрики.

Слабая сторона — риск магии. Чем сложнее доменная модель, тем важнее смотреть на сгенерированный SQL и проверять планы запросов.

GORM подойдет командам на Go, которым нужна скорость разработки и аккуратная модель данных. Для сверхкритичных участков с ручной оптимизацией иногда лучше писать SQL напрямую.

Пример

Модель и связь

Пример показывает структуру, которую обычно описывают в GORM: пользователь, его заказы и внешний ключ.

Язык: Plain text
type User struct {
    ID     uint
    Name   string
    Orders []Order
}

type Order struct {
    ID     uint
    UserID uint
    Total  int64
}