английский | 简体中文 | 繁體中文
Когда я начал разрабатывать сайты на Go и использовать фреймворк gin, было жаль, что в gin не было функции живой перезагрузки. Поэтому я поискал и попробовал новую версию, она кажется не очень гибкой, поэтому я намеревался переписать ее получше. Наконец родился Air. Кроме того, огромное спасибо пилу, ни свежести, ни воздуха :)
Air — еще одна утилита командной строки с перезагрузкой в реальном времени для разработки приложений Go. Запустите air
в корневом каталоге вашего проекта, оставьте его в покое и сосредоточьтесь на своем коде.
Примечание. Этот инструмент не имеет ничего общего с горячим развертыванием в рабочей среде.
Поддержка полей конфигурации air в качестве аргументов:
Если вы хотите настроить команду сборки и команду запуска, вы можете использовать следующую команду без файла конфигурации:
air --build.cmd " go build -o bin/api cmd/run.go " --build.bin " ./bin/api "
Используйте запятую, чтобы отделить элементы аргументов, которые принимают список в качестве входных данных:
air --build.cmd " go build -o bin/api cmd/run.go " --build.bin " ./bin/api " --build.exclude_dir " templates,build "
go install
(рекомендуется)С go 1.23 или выше:
go install github.com/air-verse/air@latest
# binary will be $(go env GOPATH)/bin/air
curl -sSfL https://raw.githubusercontent.com/air-verse/air/master/install.sh | sh -s -- -b $( go env GOPATH ) /bin
# or install it into ./bin/
curl -sSfL https://raw.githubusercontent.com/air-verse/air/master/install.sh | sh -s
air -v
# binary will be /usr/local/bin/air
curl -sSfL https://goblin.run/github.com/air-verse/air | sh
# to put to a custom path
curl -sSfL https://goblin.run/github.com/air-verse/air | PREFIX=/tmp sh
Пожалуйста, извлеките этот образ Docker cosmtrek/air.
docker/podman run -it --rm
-w " <PROJECT> "
-e " air_wd=<PROJECT> "
-v $( pwd ) : < PROJECT >
-p < PORT > : < APP SERVER PORT >
cosmtrek/air
-c < CONF >
если вы хотите использовать air постоянно, как обычное приложение, вы можете создать функцию в своем ${SHELL}rc (Bash, Zsh и т. д.).
air () {
podman/docker run -it --rm
-w " $PWD " -v " $PWD " : " $PWD "
-p " $AIR_PORT " : " $AIR_PORT "
docker.io/cosmtrek/air " $@ "
}
<PROJECT>
— это путь вашего проекта в контейнере, например: /go/example, если вы хотите войти в контейнер, добавьте --entrypoint=bash.
Один из моих проектов работает в Docker:
docker run -it --rm
-w " /go/src/github.com/cosmtrek/hub "
-v $( pwd ) :/go/src/github.com/cosmtrek/hub
-p 9090:9090
cosmtrek/air
Другой пример:
cd /go/src/github.com/cosmtrek/hub
AIR_PORT=8080 air -c " config.toml "
это заменит $PWD
на текущий каталог, $AIR_PORT
— это порт для публикации, а $@
— для принятия аргументов самого приложения, например -c
Чтобы меньше печатать, вы можете добавить alias air='~/.air'
к вашему .bashrc
или .zshrc
.
Сначала войдите в свой проект
cd /path/to/your_project
Простейшее использование выполняется
# firstly find `.air.toml` in current directory, if not found, use defaults
air -c .air.toml
Вы можете инициализировать файл конфигурации .air.toml
в текущем каталоге с настройками по умолчанию, выполнив следующую команду.
air init
После этого вы можете просто запустить команду air
без дополнительных аргументов, и она будет использовать файл .air.toml
для настройки.
air
Для изменения конфигурации обратитесь к файлу air_example.toml.
Вы можете передать аргументы для запуска встроенного двоичного файла, добавив их после команды air.
# Will run ./tmp/main bench
air bench
# Will run ./tmp/main server --port 8080
air server --port 8080
Вы можете разделить аргументы, переданные для команды air, и встроенный двоичный файл с помощью аргумента --
.
# Will run ./tmp/main -h
air -- -h
# Will run air with custom config and pass -h argument to the built binary
air -c .air.toml -- -h
services :
my-project-with-air :
image : cosmtrek/air
# working_dir value has to be the same of mapped volume
working_dir : /project-package
ports :
- <any>:<any>
environment :
- ENV_A=${ENV_A}
- ENV_B=${ENV_B}
- ENV_C=${ENV_C}
volumes :
- ./project-relative-path/:/project-package/
air -d
печатает все журналы.
Dockerfile
# Choose whatever you want, version >= 1.16
FROM golang:1.23-alpine
WORKDIR /app
RUN go install github.com/air-verse/air@latest
COPY go.mod go.sum ./
RUN go mod download
CMD [ "air" , "-c" , ".air.toml" ]
docker-compose.yaml
version : " 3.8 "
services :
web :
build :
context : .
# Correct the path to your Dockerfile
dockerfile : Dockerfile
ports :
- 8080:3000
# Important to bind/mount your codebase dir to /app dir for live reload
volumes :
- ./:/app
export GOPATH= $HOME /xxxxx
export PATH= $PATH : $GOROOT /bin: $GOPATH /bin
export PATH= $PATH : $( go env GOPATH ) /bin # Confirm this line in your .profile and make sure to source the .profile if you add it!!!
Следует использовать , чтобы избежать `' в корзине. связанная проблема: № 305
#365
[ build ]
cmd = " /usr/bin/true "
Дополнительные сведения см. в выпуске № 512.
include_dir
, include_ext
или include_file
.</body>
[ proxy ]
enabled = true
proxy_port = < air proxy port>
app_port = < your server port>
Обратите внимание, что для этого требуется Go 1.16+, поскольку я использую go mod
для управления зависимостями.
# Fork this project
# Clone it
mkdir -p $GOPATH /src/github.com/cosmtrek
cd $GOPATH /src/github.com/cosmtrek
git clone [email protected]: < YOUR USERNAME > /air.git
# Install dependencies
cd air
make ci
# Explore it and happy hacking!
make install
Запросы на вытягивание приветствуются.
# Checkout to master
git checkout master
# Add the version that needs to be released
git tag v1.xx.x
# Push to remote
git push origin v1.xx.x
# The CI will process and release a new version. Wait about 5 min, and you can fetch the latest version
Выразите огромную благодарность множеству сторонников. Я всегда вспоминал твою доброту.
Стандартная общественная лицензия GNU v3.0