Настройка GoLand
Обычный elc start поднимает контейнер с Air, который пересобирает и перезапускает сервис при изменении кода. Для отладки через GoLand создайте отдельную конфигурацию Docker Compose, в которой процесс запускает IDE. Ниже описаны Run/Debug, запуск тестов и возврат к elc start одной кнопкой.
Скриншоты иллюстрируют конфигурацию одного Go-сервиса; названия и расположение настроек зависят от версии IDE. Пути в External Tools и Working directory подставьте под свой репозиторий. Скрипты находятся в scripts/dump-compose.sh и scripts/clean-orphan.sh.
Подготовка окружения
Версию Go для Docker target выбирайте по go.mod и образу сервиса, версии Air и Delve — по mise.toml. В текущих Go-сервисах и шаблоне go.mod задаёт Go 1.27.0. Перед настройкой IDE выполните из корня сервиса:
elc mise trust
elc mise run tools:install
Подготовьте .env и .env.testing из .env.example, задайте отдельную тестовую БД и ключ приложения для каждого окружения. Подробности изоляции PostgreSQL описаны в автотестах.
CLI-команды Go, Artisan и инструментов выполняют через elc. Конфигурации Go Build / Go Test ниже используют Docker target, чтобы IDE собирала и запускала код в контейнере сервиса.
Запуск для отладки
Справа сверху — меню выбора таргета сборки/запуска и кнопки Run / Debug. Откройте настройку таргета через Edit Configurations….

Добавьте новую конфигурацию типа Go Build.

Дайте таргету имя (например Debug) и прокрутите окно до секции Before launch. Через + → Run External tool добавьте команды, которые выполнятся до старта отладки.

Первая команда — остановка текущего сервиса в ELC, чтобы не было конфликта портов и контейнеров:

- Name:
Stop ELC - Program:
elc - Arguments:
stop - Working directory: корень сервиса
Вторая команда — скрипт, который вызывает elc compose config и сохраняет конфигурацию для GoLand в ./build/docker-compose.yml. Каталог build должен существовать; после изменения ELC-конфигурации сформируйте файл заново:

- Name:
dump-compose - Program: путь к
scripts/dump-compose.shв корне сервиса - Working directory: корень сервиса
Третья — scripts/clean-orphan.sh: удаляет завершённые one-off контейнеры Docker Compose. Скрипт отбирает их по Docker labels без фильтра проекта и может удалить такие контейнеры других сервисов. Его используют для уборки служебных контейнеров /bin/true, которые некоторые версии GoLand оставляют после запуска. Добавляйте этот шаг, если проблема воспроизводится в вашей версии IDE.

В Before launch настройте Stop ELC и dump-compose; при необходимости добавьте Clean Orphan.
Дальше смените способ запуска: вместо Local machine выберите Docker Compose.

В окне таргета укажите путь к compose-файлу, который кладёт скрипт: ./build/docker-compose.yml, сервис обычно app.

В конфигурации Go Build включите обе галочки: Build on remote target и Run after build.

Сохраните конфигурацию и запускайте сервис кнопками Run и Debug. Сервис будет доступен в браузере и для соседних сервисов воркспейса как обычно. При изменении кода его нужно перезапускать вручную — hot-reload через air в этом режиме не работает.
Запуск Go Test
Настраивается так же, как отладка: вместо Go Build выбираете Go Test, Run on — тот же Docker-таргет app, с включённым Build on remote target.

В конфигурации Go Test передайте запускаемому тестовому бинарнику аргумент --env=.env.testing. Он должен попасть в параметры выполнения тестов, а не компиляции. Проверьте итоговую команду в окне Run и доступность файла в контейнере; задайте это и для шаблона конфигураций отдельных тестов.
Для проверки того же сценария из терминала или конфигурации Shell Script используйте:
elc go test ./... --env=.env.testing
elc go test ./app/modules/<module>/tests/<resource> --env=.env.testing -count=1
Замените путь второго примера на пакет своего сервиса. Конфигурация Go Test может запускать все тесты проекта или выбранного пакета. Часто нужен один конкретный тест кнопкой у номеров строк. Для этого у таргета сборки (Docker Compose / app) выставьте, что он используется по умолчанию для проекта:

Если в вашей версии IDE настройка Build on remote target недоступна для шаблона Go Test через UI, можно изменить локальный .idea/workspace.xml. Закройте IDE перед правкой, чтобы она не перезаписала файл. Найдите шаблон с default="true":
<configuration default="true" type="GoTestRunConfiguration" factoryName="Go Test">
и добавляем внутрь этого тэга такую строку
<option name="build_on_remote_target" value="true" />
После этого отдельный тест нормально стартует из редактора:

Запуск ELC-сервиса по кнопке
Чтобы после остановки отладки быстро вернуть сервис в режим air/reload, заведите таргет типа Shell Script с командой elc start.


- Name: например
ELC - Script text:
elc start - Working directory: корень сервиса
- Execute in the terminal: включено
Порт сервиса
Адрес сервиса задают APP_HOST и APP_PORT. При отладке в Docker target проверяйте и адрес внутри контейнера, и публикацию портов в build/docker-compose.yml. Изменение APP_PORT требует согласованного изменения маршрутизации или port mapping. Соседние сервисы обращаются по адресам, определённым workspace ELC.
Закрепление основных конфигураций
IDE сама плодит конфигурации при запуске тестов или HTTP-клиента. Чтобы ручные таргеты (Docker, ELC, Local и т.п.) не терялись в списке, закрепите их: три точки напротив конфигурации → Pin.
