📄️ Первый запуск Go-сервиса
Создание сервиса из Go-шаблона, настройка ELC и окружения, запуск API и первого компонентного теста.
📄️ Портирование Laravel → Goravel
Источники требований, инвентаризация поведения, этапы работы агента, артефакты и приёмка переноса сервиса.
📄️ Структура backend сервиса на языке Go
Сервисы Ensi на Go строятся на Goravel и сохраняют те же организационные цели, что и PHP-сервисы:
📄️ Стиль и правила Go-кода
Форматирование, имена, границы слоёв, ошибки, контекст, типы и правила проверяемого кода в Go-сервисах Ensi.
📄️ Работа с пакетами
Зависимости Go-сервиса описываются в go.mod и go.sum. Все команды Go toolchain, Artisan и инструментов проекта запускают через elc из корня сервиса. Для тестов явно выбирают .env.testing.
📄️ Генератор кода ensi-gog
В Go-сервисах Ensi контракт HTTP API задаётся OpenAPI-спецификацией (как и в PHP-сервисах на Laravel). Чтобы не поддерживать роуты, DTO и заготовки хэндлеров вручную, используется CLI ensi-gog — генератор из репозитория goravel-openapi-generator.
📄️ HTTP-ответы и ошибки
JSON-операции Go-сервисов Ensi используют общий конверт ответа и хелперы из app/common/http (обычный alias — commonhttp). Статус, полезная нагрузка и ошибки должны соответствовать конкретной операции в resources/openapi/. Для файловых, бинарных и HTML-ответов используйте формат, заданный контрактом операции.
📄️ Работа с базой данных
ORM-модели и связи, типы PostgreSQL, транзакции, hooks, миграции и проверка сохранённых данных.
📄️ SQL-поиск, фильтры и пагинация
Реализация SQL search через общий pipeline, публичные фильтры, сортировки, includes и проверки результата.
📄️ Создание, PATCH и удаление ресурсов
Реализация изменяющих HTTP-операций, presence/null/zero, транзакций, бизнес-правил и побочных эффектов.
📄️ Интеграция с внешним HTTP API
Установка Ensi-клиента, конфигурация и provider, контекст, ошибки, таймауты и проверки исходящих вызовов.
📄️ Загрузка, замена и удаление файлов
Multipart, публичные и защищённые диски, файловые пути, координация с SQL и изолированные проверки.
📄️ Рекомендации к написанию автотестов
Компонентный harness, PostgreSQL и lifecycle suite, OpenAPI-проверки, HTTP/Kafka/storage doubles, отказы и повтор.
📄️ Работа с Kafka
Конфигурация Kafka, typed model events, sync callbacks, исходящие события, initial-event и границы SQL/доставки.
📄️ Работа с очередями
Очереди нужны, когда работу не стоит выполнять в том же HTTP-запросе или artisan-команде, в которых она возникла. Типичные случаи — долгий пересчёт, пакетная миграция данных из мастер-сервисов, тяжёлое обращение к внешнему API, индексация пачки сущностей. При асинхронном соединении задача передаётся в backend очереди, а отдельный воркер подхватывает её позже. Соединение sync выполняет работу сразу в вызывающем процессе.
📄️ Логирование
Go-сервисы Ensi пишут логи через штатный Log-фасад Goravel (facades.Log()), а доставку в Elasticsearch и формат документов, совместимый с индексами платформы, обеспечивает адаптер в app/adapters/logging. По смыслу это тот же стек, что и в PHP (каналы, уровни, файлы + централизованный поиск), только без Monolog: каналы описаны в config/logging.go, а custom-драйвер elastic / elastic_access буферизует документы и отправляет их bulk-запросом.
📄️ Prometheus-метрики
Go-сервисы Ensi отдают метрики в формате Prometheus. Основные имена HTTP-метрик близки к PHP-сервисам, но типы коллекторов, значения лейблов и набор фоновых метрик различаются. При подключении Go-сервиса проверьте запросы и переменные платформенного дашборда по описанию ниже.
📄️ Настройка GoLand
Обычный elc start поднимает контейнер с Air, который пересобирает и перезапускает сервис при изменении кода. Для отладки через GoLand создайте отдельную конфигурацию Docker Compose, в которой процесс запускает IDE. Ниже описаны Run/Debug, запуск тестов и возврат к elc start одной кнопкой.