После первого CRUD на database/sql вопрос «как работать с БД в Go» распадается на три стратегии: ORM с активной записью, кодогенерация из SQL и схема-первая ORM. GORM, sqlc и ent представляют ровно эти три подхода, и споры вокруг них — классика чатов Go-разработчиков. На этой странице всё три библиотеки читают одну и ту же задачу: список задач с фильтром и созданием записи.
GORM — самый распространённый ORM для Go: структура-модель с тегами, автоматические миграции, связи has-many/belongs-to, хуки до и после сохранения. Порог входа минимальный, CRUD пишется без единой строки SQL. Плата за удобство — магия: часть ошибок (N+1 в ассоциациях, неожиданные каскады) всплывает в рантайме, а сложные запросы всё равно уходят в Raw SQL.
sqlc идёт от обратного: вы пишете обычный SQL в .sql-файлах с аннотациями, а генератор создаёт строго типизированный Go-код. Никакой магии в рантайме — то, что скомпилировалось, то и выполнится; ошибки в запросах ловит компилятор. ent, созданный в Facebook (Ariel Mashraki), описывает схему на Go-коде и генерирует графовую ORM: предикаты, транзитивные запросы через edges, приватные поля и code-first миграции. Это мощно для связанных данных, но добавляет слой абстракции и время на обучение.
Практическое правило, которое подтверждает и наша программа обучения: аналитические и отчётные запросы удобнее писать sqlc-путём, быстрый прототип с миграциями и связями — GORM, домены с плотным графом связей (соцсети, каталоги, права) — ent. Каждый подход разобран в отдельном курсе: GORM, sqlc и ent — по 25 уроков с практикой в браузере.