CRUD generator для golang + PostgreSQL

Для работы любого сервиса обычно нужна база данных. Чаще всего PostgreSQL.
Также требуются общие функции по работе с БД, так называемые CRUD операции,
операции CREATE + READ + UPDATE + DELETE, а также другие функции по работе с БД.

Без создания общих функций получится полный хаос в работе, каждый программист будет делать по‑своему, получится много ошибок и др. Для создания функций CRUD требуется написать много однотипного кода, достаточно трудоёмкая работа, и при этом очень важная, как в доме самое важное — это фундамент, так и в любом сервисе самое важное — это CRUD‑операции.

Есть специализированные ORM для облегчения работы программиста, такие как gorm, тем не менее, всё равно, надо писать функции CRUD самому. (используется компонента pgx pool, т.к. без gorm работает в два раза быстрее) Также нужен код для подключения к БД, отключения, graceful shutdown, балансировщик нагрузки, загрузка параметров из переменных окружения и др.

Для автоматического написания такого кода, я сделал готовый кодогенератор: crud_generator, который напишет полностью готовый микросервис, с CRUD операциями для всех таблиц, которые можно использовать напрямую или по сети через протокол GRPC. Список всех таблиц и колонок берётся напрямую из БД. Заполнить надо только параметры подключения к БД в файле с настройками, можно заполнить фильтр какие таблицы брать, какие исключать, есть ещё много настроек, но все можно не изменять. Получится готовый микросервис, который можно сразу запустить, или можно использовать как библиотеку через import.

Для каждой таблицы в базе данных Postgres SQL автоматически будут сделаны функции для выполнения crud операций:

Схема как это работает:

Кодогенератор универсальный, будет работать в любой базе, сейчас работает у нас на prod, сгенерировано 700 тысяч строк кода автоматически. Надеюсь ещё кому-нибудь пригодится :-)

Github

@manyakRus
25.08.2025 19:27 UTC
Первоисточник

Комментарии

@des1roer
25.08.2025 16:11 UTC
-2

Если id не serial а uuid будет работать?

@manyakRus
26.08.2025 06:10 UTC
-1

У нас есть поля типа uuid, работает с ними хорошо, будет тип golang uuid.UUID. ID типа uuid не пробовал.

@savostin
25.08.2025 16:38 UTC
+2

Postgrest?

@nik_the_spirit
25.08.2025 19:46 UTC
+5

in peace

@anaxita
25.08.2025 21:38 UTC
+6

А как понять что это «у вас в проде» работает?

Выглядит так что вы либо джун либо с другого языка перешли, но судя по переменным «otvet := …” и прочему неймингу - скорее сразу оба варианта и вам по какой то причине в маленькой конторе дали карт-бланш на технические решения, а значит лида нет либо он на другом языке и забил на проект.

напишите название компании плз чтобы сразу понимать)

@manyakRus
27.08.2025 07:47 UTC
+1
  1. Шаблоны кода можно изменять, можете сделать любой нейминг

  2. Тимлид есть, проекты развиваются

  3. Компания Росатом

  4. Репозиторию уже 3 года, и реальным рабочим проектам тоже столько же.

  5. Перешёл с языка 1С на golang 4 года назад

  6. Слово "Otvet" любой поймёт что означает, и для чего нужно.
    У англицизмов неочевидное назначение, слово "Result" может означать что угодно, а слово "Ответ" означает всегда одинаково - что вернётся в результате работы функции

01.09.2025 12:01 UTC
0

в таком случае я бы на месте ваших pjm-ов и техлидов задумался о соответствии тимлида занимаемой должности. Алсо стоило ли оно того вкладываться в разработку и поддержку вашего crud generator, тогда, как в экосистеме Go есть несколько зрелых, богатых фичами решений для генерации типизированного CRUD-кода для PostgreSQL? Вам фактически заплатили за поломанный велосипед, имея возможность получить бесплатный автомобиль

и то что вы назвали "англицизмами" - устоявшиеся английские эквиваленты для большинства терминов . Использовать Answer или Response вместо Otvet не только естественнее, но и помогает читать код без лишнего "контекста", ибо в продакшене строго придерживаются английского языка. А транслит (внезапные русские слова, написанные английскими буквами Otvet, Vopros) выбивается из стиля и напоминают студенческие или "пет-" проекты , человеку со стороны сложно понять, почему не используется английский термин . Возможно для Вас это не очевидно из за пресловутой проф деформации 1С. Но уж оч очевидно буквально для всех в IT профессии, это Вам инфа 100

@Vitimbo
26.08.2025 05:59 UTC
+4

Приятно видеть, что на любом языке все эти автокруды оказываются калом :)

@manyakRus
28.08.2025 08:32 UTC
0

Мой круд кодогенератор работает хорошо, используем в работе.
Экономит очень много времени программиста.
Также его скачивают (используют) по 100 человек/каждые 2 недели
(статистика из гитхаба)

28.08.2025 11:53 UTC
0

Я не говорил, что ваш генератор работает как-то неправильно. Я говорил о том, что это кал, как концепция.

@Debrainer
27.08.2025 11:53 UTC
0

На картинке crud service выглядит как корзина, в которую сложили все яйца.

Надёжнее было бы каждому сервису с выделенной бизнес-логикой генерить свой crud service.

@manyakRus
29.08.2025 11:56 UTC
0

Если базы данных разные - то конечно надо каждому сервису делать свой crud service.
Если база данных одна - то хватит одного crud service для всех микросервисов

@GMsinev
28.08.2025 07:25 UTC
+1

Голяковые crud операции в 75% случаев не нужны - ибо база это транзакции и ссылочная целостность. По этой же причине orm это зло - ибо откат orm транзакций - проще застрелиться.

Нужны обычно семантические операции, а не чистый, сферический crud, иначе проще сразу работать не с реляционной базой