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

Настройка 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….

Меню Edit Configurations

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

Добавление Go Build

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

Before launch → Run External tool

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

External tool: elc stop

  • Name: Stop ELC
  • Program: elc
  • Arguments: stop
  • Working directory: корень сервиса

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

External tool: dump-compose.sh

  • Name: dump-compose
  • Program: путь к scripts/dump-compose.sh в корне сервиса
  • Working directory: корень сервиса

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

External tool: clean-orphan.sh

В Before launch настройте Stop ELC и dump-compose; при необходимости добавьте Clean Orphan.

Дальше смените способ запуска: вместо Local machine выберите Docker Compose.

Смена Run on с Local machine

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

Путь к docker-compose.yml

В конфигурации Go Build включите обе галочки: Build on remote target и Run after 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

В конфигурации 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) выставьте, что он используется по умолчанию для проекта:

Project default target

Если в вашей версии 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" />

После этого отдельный тест нормально стартует из редактора:

Запуск одного теста из gutter

Запуск ELC-сервиса по кнопке​

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

Добавление 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.

Pin конфигурации