Настройка GoLand
Обычный elc start поднимает контейнер, внутри которого работает air: он перекомпилирует и перезапускает сервис при изменении кода. В таком режиме удобно жить день за днём, но отладчик GoLand к процессу не подключить. Ниже — как завести отдельные конфигурации Run/Debug через Docker Compose, гонять тесты и при необходимости возвращаться к elc start одной кнопкой.
Скриншоты сняты на примере Go-сервиса; пути в External Tools и Working directory подставьте под свой репозиторий. Скрипты scripts/dump-compose.sh и scripts/clean-orphan.sh лежат в корне Go-сервисов Ensi.
Запуск для отладки
Справа сверху — меню выбора таргета сборки/запуска и кнопки Run / Debug. Откройте настройку таргета через Edit Configurations….

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

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

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

- Name:
Stop ELC - Program:
elc - Arguments:
stop - Working directory: корень сервиса
Вторая команда — скрипт, который дампит docker-compose.yml для GoLand (файл появится в ./build/docker-compose.yml):

- Name:
dump-compose - Program: путь к
scripts/dump-compose.shв корне сервиса - Working directory: корень сервиса
Третья — scripts/clean-orphan.sh: находит завершённые one-off контейнеры Docker Compose (docker compose run) и удаляет их. Это workaround: GoLand создаёт служебный контейнер /bin/true без --rm, и он остаётся orphan.

В 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.

Такая конфигурация гоняет сразу все тесты проекта (или выбранной директории). Часто нужен один конкретный тест кнопкой у номеров строк. Для этого у таргета сборки (Docker Compose / app) выставьте, что он используется по умолчанию для проекта:

Кроме того нужно отредактировать файл .idea/workspace.xml - почему-то опция Build on remote target недоступна для дефолтной конфигурации через UI,
так что нужно её включить через правку кофнига.
Для этого ищем в вышеуказанном файле строку (важно чтобы было 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: включено
Запуск сервиса вне контейнера
Если нужно гонять процесс на хосте, создайте таргет Go Build почти без изменений. В .env сервис обычно слушает порт 80 (так удобнее в сети воркспейса), а на хосте этот порт без root недоступен — переопределите его в Environment, например APP_PORT=8080:

Закрепление основных конфигураций
IDE сама плодит конфигурации при запуске тестов или HTTP-клиента. Чтобы ручные таргеты (Docker, ELC, Local и т.п.) не терялись в списке, закрепите их: три точки напротив конфигурации → Pin.
