Просто «Воздух» в ваших проектах

Если вы переходите из Node.js в мир Go, вы, вероятно, упускаете одну важную функцию, которая была у вас в JavaScript, Angular, React, Vue и т. д.

Все они быстро разрабатываются, поскольку они принимают ваши изменения, когда вы просто сохраняете файлы, над которыми работаете, то же самое происходит, когда вы используете что-то вроде экспресса, есть такие инструменты, как nodemon, которые упрощают эту работу.

В Go есть несколько способов сделать это. Я покажу один из них, лучший, на мой взгляд. Я также опишу вам, как сделать это только с приложением Go или с другими зависимостями в файле docker-compose.

Этот метод хорошо работает с модулями go. Кроме того, если вы добавите новые зависимости с помощью go get, приложение также будет перезагружено.

Оглавление

Этот учебник разделен на следующие темы:

  • Пример приложения go (с модулями go)
  • Одно приложение Live-Reload
  • Live-Reload с несколькими зависимостями (docker-compose)

Пример приложения

Это простое приложение состоит из 2 файлов, main.go и go.mod, оно просто печатает случайное число uuid каждый раз, когда вы нажимаете ввод.

Эта простая программа просто генерирует новый UUID каждые 4 секунды и отображает его в консоли, достаточно просто, чтобы не отвлекать нас от основной цели: перезагрузка в реальном времени.

Live Reload — одно приложение

Чтобы получить это приложение с live-reload (пересборка и повторный запуск при сохранении) нам нужно установить Air:

go install github.com/cosmtrek/air@latest

Это установит его прямо из репозитория Air. После этого мы можем протестировать установку, запустив air -v.

Затем мы можем перейти в каталог нашего приложения и инициализировать его с помощью:

air init

Это создаст файл .air.toml со значениями по умолчанию. Вы можете взглянуть на это и изменить то, что вам нужно для вашего приложения (команда сборки, исключенные папки и т. д.).

Это будет выглядеть примерно так:

Инициализировав это, мы можем начать использовать только что запущенную live-reload:

air

Теперь, если мы внесем какие-либо изменения в приложение, оно обнаружит его, скомпилирует и запустит. В этом примере я только что протестировал изменение количества секунд ожидания для каждого поколения UUID:

Мы также можем заархивировать то же самое, не устанавливая air, через контейнер docker, просто запустив его с образом air docker:

docker run -it — rm \
-w "/go/src/github.com/luisegr/go-live-reload-tutorial" \
-v $(pwd):/go/src/github.com/luisegr/go-live-reload-tutorial \
cosmtrek/air

Это приведет к тому же выводу и перезагрузке при изменениях:

Live-Reload — множественные зависимости

Если вы запускаете свою среду разработки с помощью docker-compose и используете другие вещи, такие как postgres, mongo, Redis и т. д. Вместе со своим приложением вы также можете использовать Air для живой перезагрузки.

Вам просто нужно установить docker-compose.yml следующим образом:

Затем вы можете запустить свое приложение, как обычно, с помощью:

docker-compose up

Вы увидите вывод, и если у вас все еще есть функция перезагрузки в реальном времени:

Я надеюсь, что вы найдете это полезным, и для получения более подробной информации обо всех функциях вы можете проверить репозиторий Air: