# 17 - ЕЖЕДНЕВНАЯ ПОЧТА
Полная среда разработки Go с Docker и VS Code
Статья №3 в серии Go RESTful
В прошлый раз я создал простой скрипт, запускающий контейнер Docker, который может синхронизировать и выполнять исходный код Go с моей локальной машины. Но я еще не объяснил, как поддерживать IntelliSense и отладку, которые имеют решающее значение для разработки. Давайте сделаем это в этой статье.
Соображения
Я немного волновался, когда исследовал решения для этой цели, потому что это сильно зависит от поставщиков редакторов кода / IDE, которые нормально работают с контейнером. К счастью, есть два популярных редактора, поддерживающих именно это: GoLand и VS Code.
Поддержка GoLand выглядит довольно зрелой, потому что она существует уже некоторое время (происходит от IntelliJ). Однако эта функция доступна только в купленной версии.
Расширение VS Code Remote-Containers было выпущено совсем недавно, поэтому оно не так развито, как GoLand. Тем не менее, расширение официально разработано и поддерживается Microsoft (не с открытым исходным кодом) и планируется использовать во многих будущих сервисах в качестве сопутствующей веб-среды IDE или облачной IDE, так что это очень многообещающе. На момент написания этой статьи набор функций выглядел достаточно хорошо для начала. Пойдем с VS Code.
Судя по всему, мы можем использовать Vim прямо в контейнере и устанавливать в него классные плагины. Однако это будет мой последний дубль, потому что я установил это не только для себя, но и для своей команды (и для вашей тоже), а процесс обучения Vim очень тяжел для большинства разработчиков.
Удаленные контейнеры VS Code
Концепция
VS Code Remote-Containers - это расширение, которое помогает разработчикам работать со своим пользовательским интерфейсом VS Code в обычном режиме, но все команды и действия распространяются и выполняются внутри контейнера. На самом деле это похоже на то, что вы загружаете TeamViewer в контейнер и используете в нем VS Code.
Реализация VS Code достаточно сильна и абстрактна, чтобы большинство расширений работало как есть.
С помощью этой концепции мы можем контейнеризовать среду практически для любого типа разработки, не только для Go.
Рецепт приготовления
Установите расширение VS Code Remote-Containers.
Напишите Dockerfile
описание вашего образа с пакетами и инструментами, необходимыми для запуска и отладки вашего приложения.
Создайте .devcontainer.json
в корне рабочего пространства (рядом с .vscode
), ссылаясь на Dockerfile
.
{ "dockerFile": "Dockerfile", "extensions": [ "ms-vscode.go" ] }
Откройте папку, содержащую ваш .devcontainer.json
файл, с помощью VS Code. VS Code автоматически обнаружит это и попросит вас открыть проект в режиме контейнера.
Затем VSCode построит ваш образ на основе вашего Dockerfile
(только в первый раз) и настроит некоторые дополнительные необходимые пакеты, чтобы он мог работать в контейнерах.
После завершения процесса вы теперь можете использовать VS Code как обычно, и все фактически запускается внутри контейнера.
Как и в приведенном выше примере, у меня даже нет go
среды выполнения на моем локальном компьютере, но я все еще могу выполнять код Go из моего VS Code и могу получить доступ к серверу из Safari. Все делается внутри контейнера.
Реализация
Следуя концепции и рецепту, упомянутым выше, я создал Dockerfile
.
Образ основан на официальном образеgolang
, поэтому он может правильно поддерживать go
. Затем я установил некоторые инструменты, необходимые для расширения Go VS Code, чтобы иметь возможность использовать функции IntelliSense, линтинга и отладки.
Затем я написал .devcontainer.json
файл.
Он просто ссылается на мой Dockerfile
и перечисляет все расширения, которые VS Code должен установить в прикрепленные контейнеры. Он также устанавливает сопоставление портов с моего локального компьютера на мой контейнер и наоборот, поэтому я могу тестировать свое приложение прямо из браузера.
Результат
Мне удалось написать код со всеми функциями IntelliSense, такими как автозаполнение, автоматический импорт, навигация по коду и т. Д.
Мне удалось запустить приложение без установки среды выполнения Go на моем локальном компьютере. Благодаря сопоставлению портов я также могу тестировать свое приложение в Safari.
Я смог использовать потрясающие функции отладки, поддерживаемые расширением Go VS Code.
Ограничения
У меня почти есть все, что мне нужно; однако есть некоторые ограничения, которые меня немного раздражают:
- Мне пришлось немного поработать, чтобы иметь возможность использовать команду VS Code git push, потому что для этого требуются мои учетные данные SSH, привязанные к контейнеру.
- Мне не удалось подписать GPG свою фиксацию с помощью команды VS Code git commit, потому что для пересылки команд GPG из контейнеров на хост-компьютер требуется довольно много работы.
Подвести итог
Хотя все еще есть некоторые ограничения, я смог разрешить эпопею, определенную здесь, и у меня была постоянная контейнерная среда разработки с опытом разработки местного качества.
Спасибо Microsoft за такую спасительную функцию!
Полный исходный код статьи опубликован здесь.