Работа с пакетами
Зависимости 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; при общем томе это затронет и другие сервисы. Следующие команды заново загрузят модули по мере необходимости. Очистка кэша сама по себе не меняет выбранные версии зависимостей.