Пара «sqlc или gorm» — самый живой спор о доступе к данным в Go последних лет, потому что обе библиотеки популярны, а философии противоположны. sqlc — SQL-first: запросы живут в .sql-файлах, утилита анализирует их вместе со схемой и генерирует обычные Go-функции с честными типами. GORM — ORM-first: модели описываются структурами с тегами, а запросы собираются цепочками методов на живом объекте, SQL остаётся за кадром. На этой странице сравним их по одним критериям, покажем одну и ту же задачу рядом и соберём персональную рекомендацию ползунками под ваши приоритеты.
sqlc берёт предсказуемостью и типобезопасностью. Каждый запрос — именованный блок с комментарием name: GetUserByToken :one, по которому генерируется функция с типизированными параметрами и возвращаемой структурой: ошибка в имени колонки или типе ловится при генерации, а не тестом в проде. В рантайме sqlc дешевле ORM — плоские вызовы database/sql без рефлексии и хуков, а SQL остаётся честным: DBA читает запросы в файлах, планы explain пишутся без расшифровки магии. Расплата — динамика: фильтры, которые собираются на лету, даются тяжело, JOIN-граф для Preload-подобной жадной загрузки пишется руками, а миграции — отдельный инструмент.
GORM отвечает скоростью CRUD и экосистемой. Структура с тегами — уже модель: AutoMigrate создаст таблицы, Preload догрузит связи, хуки повесят логику на BeforeCreate, а soft delete включается одним полем. Цепочки db.Where(...).Order(...).Find(...) собираются в рантайме, поэтому динамические фильтры из опциональных параметров API пишутся тривиально. Сообщество крупнейшее среди Go-ORM: плагины, драйверы, рецепты. Расплата — рантайм: имена полей и операций живут в строках и рефлексии, опечатка ловится тестом, а тяжёлые запросы рано или поздно упираются в Raw и возвращают SQL-строки в проект.
Как читать итог ниже: оценки — усреднение практики команды проекта, а не лабораторные замеры; ползунки подставляют ваши приоритеты. Грубая граница: сервис с понятным набором запросов и командой, которая уважает SQL — sqlc; прототип или продукт, где база растёт из кода, а CRUD-рутина должна исчезнуть — GORM. Смешанная стратегия тоже легальна: GORM для простых моделей и миграций, sqlc для отчётов и горячих выборок. Другие развилки слоя данных разобраны в сравнениях тройки gorm-sqlc-ent, sqlc с конструктором squirrel и sqlboiler с GORM.