Перейти к основному содержимому

Работа с пакетами

Зависимости Go-сервиса описываются в go.mod и go.sum. Все команды Go toolchain, Artisan и инструментов проекта запускают через elc из корня сервиса. Для тестов явно выбирают .env.testing.

Версии Go и инструментов​

Версию Go проверяйте по директиве go в go.mod и образу контейнера ELC. При обновлении учитывайте требования всех подключённых модулей.

Версии генератора, линтеров, Air, Delve и других инструментов проекта закреплены в mise.toml. Установка выполняется штатной задачей сервиса:

elc mise trust
elc mise run tools:install
elc ensi-gog --version

Установка произвольного @latest поверх закреплённого генератора может изменить результат генерации. Обновление инструмента оформляйте через конфигурацию mise и проверку полученного diff. Подробнее — ensi-gog.

go.mod и go.sum​

В require указана минимальная требуемая версия зависимости: тег или псевдоверсия от коммита. Итоговую версию выбирает Go из графа требований по правилам Minimal Version Selection; другая зависимость может потребовать более новую версию того же модуля. Поэтому go.mod следует рассматривать вместе с полным графом зависимостей.

go.sum хранит контрольные суммы модулей и их go.mod, позволяя проверять скачанное содержимое. Он может содержать записи для нескольких версий одного модуля и не является аналогом lock-файла Composer с полным списком выбранных версий. Прямые и необходимые непрямые зависимости (indirect) отражаются в go.mod; изменения обоих файлов просматривают и коммитят вместе.

Модуль приложения в шаблоне называется:

module goravel

Это префикс внутренних импортов (goravel/app/..., goravel/tests). При создании сервиса штатным initializer-ом имя сохраняют.

У публикуемого клиента или библиотеки путь модуля должен позволять получить его из репозитория, например:

module gitlab.com/greensight/ensi/catalog/clients/pim-client-go

Как добавить или обновить зависимость​

Указывайте согласованную версию модуля. Пример установки версии HTTP runtime:

elc go get gitlab.com/greensight/ensi/packages/goravel-ensi-http-client@v1.0.1
elc go mod tidy

Это пример выбора версии, а не обязательное обновление каждого сервиса. Для зависимости без подходящего тега можно указать commit или ветку; toolchain запишет соответствующую версию. Псевдоверсия вроде v0.0.0-20260526163538-3dc84a4a5aaa содержит время коммита и его короткий хеш.

go mod tidy синхронизирует требования с импортами: удаляет лишнее и добавляет недостающее. Для проверки без изменения файлов в сервисах есть задача:

elc mise run check:mod-tidy

Для клиентов Ensi также используется скрипт:

elc ./scripts/update-client.sh <branch>

Он выбирает *-client-go из go.mod и обновляет зависимость до коммита указанной ветки. После обновления просмотрите go.mod / go.sum, проверьте затронутое поведение и сборку.

Подключение Goravel-пакета клиента​

Сначала добавьте выбранную версию сгенерированного *-client-go в зависимости через elc go get. Затем установите пакет из корня потребителя:

elc ./artisan package:install gitlab.com/greensight/ensi/cms/clients/cms-client-go

Installer публикует конфигурацию и provider, добавляет регистрации. Просмотрите изменения в config/ensi_clients, app/providers, bootstrap и config/app.go, сохраните существующую сборку приложения и настройте middleware клиента. Для обновления уже установленной библиотеки проверьте также опубликованный код: локальные provider и config могут требовать отдельной доработки.

Настройка URL, provider, контекста, middleware и тестовых подмен разобрана в руководстве по HTTP-клиентам.

Локальная подмена пакетов через go.work​

Для одновременной разработки сервиса и библиотеки можно создать локальный go.work:

go 1.27.0

use (
./
../clients/cms-client-go
../clients/pim-client-go
)

Пути в use задаются относительно go.work. Замените их на расположение своих checkout-ов и убедитесь, что каталоги доступны в контейнере ELC. module каждой локальной библиотеки должен совпадать с импортируемым путём. Директива go workspace должна соответствовать требованиям включённых модулей; после изменения состава можно использовать elc go work sync, учитывая, что он может обновить go.mod участников.

Локальные go.work и go.work.sum с путями разработчика исключают из Git. В workspace перечисляют и сам сервис: все модули из use участвуют в выборе зависимостей для сборки и тестов.

go get и go mod tidy изменяют зависимости отдельного модуля и не закрепляют локальную подмену из use. Поведение go mod download зависит от режима workspace и аргументов, поэтому его не следует использовать как подтверждение выбора опубликованной версии. Зависимости публикуемого модуля описывают в его собственном go.mod.

Перед сдачей изменений опубликуйте библиотеку и обновите зависимость сервиса на нужный commit или тег. Проверьте сборку и тесты с отключённым workspace, чтобы результат не зависел от соседнего checkout-а:

elc env GOWORK=off go build -o build/app
elc env GOWORK=off go test ./... --env=.env.testing

Сброс кэша модулей​

Для диагностики повреждённого кэша можно выполнить:

elc go clean -modcache -cache

Команда удаляет кэш модулей и сборки пользователя внутри окружения ELC; при общем томе это затронет и другие сервисы. Следующие команды заново загрузят модули по мере необходимости. Очистка кэша сама по себе не меняет выбранные версии зависимостей.