Просто «Воздух» в ваших проектах
Если вы переходите из 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: