Выбор «sqlboiler или ent» встаёт, когда команда решила уходить от строковых запросов GORM к кодогенерации, но спорит о направлении: откуда растёт истина — из базы или из кода. Обе библиотеки выдают типизированный Go-код и ловят опечатки в полях на компиляции, но философии противоположные. sqlboiler подключается к живой СУБД и генерирует модели по её актуальной схеме: база — источник правды, код — её отражение. ent описывает схему отдельным Go-кодом, а базу создаёт под неё: схема — источник правды, база — её следствие. На этой странице разберём оба подхода по одним критериям, покажем одну и ту же задачу — пользователя с постами — рядом в обоих мирах и соберём персональную рекомендацию ползунками важности.
sqlboiler силён там, где база уже спроектирована и работает: легаси-таблицы, схема от DBA, миграции из другого инструмента. Утилита sqlboiler читает information_schema и выдаёт модели со связями, которые видны во внешних ключах: Preload догружает посты автора, запросы строятся типизированными хелперами qm, а сгенерированный код читается как обычный Go. Расплата — направление потока: схему меняют руками в базе или отдельными миграциями, а перегенерация моделей — отдельный шаг после каждого изменения; вложенные обходы вроде друзей друзей выражаются заметно тяжелее, чем в ent, и для нестандартных случаев приходится добавлять сырые фрагменты.
ent отвечает кодогенерацией всего конвейера: схема на Go с полями, рёбрами и индексами, из которой go generate выдаёт типизированный клиент, миграции и даже GraphQL-слой. Запрос user.Query().WithPosts().QueryPosts() проверяется компилятором целиком, а связи — первоклассные сущности: многие-ко-многим, транзитивные обходы и предикаты по графу выражаются естественно. Цена — инверсия привычного порядка: команда должна принять схемный подход, прожить кодогенерацию в CI и принимать, что база следует за схемой, а не наоборот; сообщество у ent заметно больше, чем у sqlboiler, и рецепты ищутся быстрее.
Как читать итог ниже: оценки — усреднение практики команды проекта, а не лабораторные замеры; ползунки подставляют ваши приоритеты. Грубая граница: база уже есть и меняется редко — sqlboiler; схема эволютирует вместе с кодом, связи сложные, миграции нужны в конвейере — ent. Если вы ещё не определились между ORM и SQL вообще, начните со страницы GORM, sqlc и ent — там разобран и третий путь с кодогенерацией из чистого SQL.