Выбор между GORM и ent встаёт, когда ручной SQL через database/sql перестал масштабироваться: копипаста запросов, ошибки в полях, миграции руками. Обе библиотеки закрывают эту боль, но философии противоположные. GORM описывает модели структурами с тегами и строит запросы цепочкой вызовов в рантайме. ent описывает схему отдельным кодом, генерирует типизированный клиент и ловит опечатки в названиях полей ещё на компиляции. На этой странице разберём оба подхода по одним критериям, покажем одну и ту же задачу рядом и соберём персональную рекомендацию ползунками.
GORM — стандарт де-факто: по звёздам и вакансиям это самая востребованная ORM Go. Модель — обычная структура: теги gorm описывают колонки, AutoMigrate создаёт и обновляет таблицы, Preload догружает связи, хуки и скоупы позволяют встраивать бизнес-логику. Из этого следует главный практический аргумент — экосистема: драйверы для всех популярных СУБД, плагины для пагинации, шифрования и чтения реплик, а ответ на почти любой вопрос уже лежит на форумах. Расплата — типобезопасность: имена полей в Where и Order передаются строками, и опечатка всплывает только в рантайме, а за производительность местами придётся платить вниманием: ленивые загрузки и N+1 ловятся профилировщиком, а не компилятором.
ent идёт другим путём: сначала схема (поле, тип, связь, индекс), затем go generate — и в проекте появляется типизированный клиент. Запрос user.Query().Where(user.Name(Аня)).QueryPosts() целиком проверяется компилятором: переименовали поле — компиляция падает во всех местах, где оно использовалось, вместо тихой ошибки в проде. Связи описываются графом: многие-ко-многим, транзитивные обходы и запросы «друзья друзей» выражаются естественно. Цена — порог входа и кодогенерация: команда должна принять схемный подход и прожить генерацию в CI, а сообщество и число готовых рецептов у ent заметно скромнее, чем у GORM.
Как читать итог ниже: оценки — усреднение практики команды проекта, а не лабораторные бенчмарки; ползунки позволяют подставить свои приоритеты. Грубая граница такая: типовой CRUD-сервис, где важны скорость старта и знакомость — GORM; сложный домен с десятками связей, где цена ошибки в рантайме высока, — ent. Если вы пока выбираете между ORM и чистым SQL, начните со страницы сравнения GORM, sqlc и ent — там же разобран третий путь с кодогенерацией из SQL. Одна и та же задача «пользователь с постами» в обеих ORM — ниже.