Project Icon

air

Go应用开发实时热重载工具 Air

Air是一款专为Go应用开发设计的实时热重载工具。它能自动监控项目文件变化,实时编译并重启应用,提高开发效率。Air具有自定义构建命令、排除子目录、动态监控新目录等功能,并提供彩色日志输出。使用简单,在项目根目录运行Air命令即可,让开发者专注于代码编写。这个开源工具适用于Go语言开发者,特别是使用gin等框架的Web应用开发。

:cloud: Air - Go 应用程序的实时重载工具

Go Codacy Badge Go Report Card codecov

air

English | 简体中文 | 繁體中文

动机

当我开始使用 Go 开发网站并使用 gin 框架时,遗憾的是 gin 缺少实时重载功能。所以我四处寻找并尝试了 fresh,但它似乎不够灵活,所以我打算重写一个更好的版本。最终,Air 诞生了。 此外,非常感谢 pilu,没有 fresh,就没有 air :)

Air 是另一个用于开发 Go 应用程序的实时重载命令行工具。在项目根目录运行 air,然后专注于你的代码即可。

注意:此工具与生产环境的热部署无关。

特性

  • 彩色日志输出
  • 自定义构建或任何命令
  • 支持排除子目录
  • 允许在 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.22 或更高版本:

go install github.com/air-verse/air@latest

通过 install.sh

# 二进制文件将安装到 $(go env GOPATH)/bin/air
curl -sSfL https://raw.githubusercontent.com/air-verse/air/master/install.sh | sh -s -- -b $(go env GOPATH)/bin

# 或安装到 ./bin/
curl -sSfL https://raw.githubusercontent.com/air-verse/air/master/install.sh | sh -s

air -v

通过 goblin.run

# 二进制文件将安装到 /usr/local/bin/air
curl -sSfL https://goblin.run/github.com/air-verse/air | sh

# 安装到自定义路径
curl -sSfL https://goblin.run/github.com/air-verse/air | PREFIX=/tmp sh

Docker/Podman

请拉取此 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>

Docker/Podman .${SHELL}rc

如果你想像正常应用程序一样持续使用 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

使用

为了减少输入,你可以在 .bashrc.zshrc 中添加 alias air='~/.air'

首先进入你的项目

cd /path/to/your_project

最简单的用法是运行

# 首先在当前目录查找 `.air.toml`,如果没有找到,则使用默认设置
air -c .air.toml

你可以使用以下命令将默认设置的 .air.toml 配置文件初始化到当前目录。

air init

之后,你可以直接运行 air 命令而无需额外参数,它将使用 .air.toml 文件进行配置。

air

要修改配置,请参考 air_example.toml 文件。

运行时参数

你可以通过在 air 命令后添加参数来传递给构建的二进制文件。

# 将运行 ./tmp/main bench
air bench

# 将运行 ./tmp/main server --port 8080
air server --port 8080

你可以使用 -- 参数来分隔传递给 air 命令和构建的二进制文件的参数。

# 将运行 ./tmp/main -h
air -- -h

# 将使用自定义配置运行 air 并将 -h 参数传递给构建的二进制文件
air -c .air.toml -- -h

Docker Compose

services:
  my-project-with-air:
    image: cosmtrek/air
    # working_dir 值必须与映射卷相同
    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 打印所有日志。

不想使用 air 镜像的 Docker 用户的安装和使用方法

Dockerfile

# 选择你想要的版本,版本 >= 1.16
FROM golang:1.22-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: .
      # 修正到你的 Dockerfile 的路径
      dockerfile: Dockerfile
    ports:
      - 8080:3000
    # 重要:将你的代码库目录绑定/挂载到 /app 目录以实现实时重载
    volumes:
      - ./:/app

常见问题

"command not found: air" 或 "No such file or directory"

export GOPATH=$HOME/xxxxx
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
export PATH=$PATH:$(go env GOPATH)/bin <---- 确认这行在你的配置文件中!!!

在 wsl 下,当 bin 中包含 ' 时出错

应使用 \ 来转义 bin 中的 '。相关问题:#305

问题:如何只进行热编译而不运行任何内容?

#365

[build]
  cmd = "/usr/bin/true"

如何在静态文件变更时自动刷新浏览器

参考问题 #512 获取更多详情。

  • 确保你的静态文件在 include_dirinclude_extinclude_file 中。
  • 确保你的 HTML 有一个 </body> 标签
  • 通过配置以下设置来激活代理:
[proxy]
  enabled = true
  proxy_port = <air 代理端口>
  app_port = <你的服务器端口>

开发

请注意,由于我使用 go mod 管理依赖,所以需要 Go 1.16+ 版本。

# Fork 这个项目

# 克隆它
mkdir -p $GOPATH/src/github.com/cosmtrek
cd $GOPATH/src/github.com/cosmtrek
git clone git@github.com:<YOUR USERNAME>/air.git

# 安装依赖
cd air
make ci

# 探索它并开心地黑客吧!
make install

欢迎提交 Pull 请求。

发布

# 切换到 master 分支
git checkout master

# 添加需要发布的版本
git tag v1.xx.x

# 推送到远程
git push origin v1.xx.x

# CI 将处理并发布新版本。等待约 5 分钟,你就可以获取最新版本

Star 历史

Star History Chart

赞助

Buy Me A Coffee

非常感谢众多支持者。我一直铭记你们的善意。

许可证

GNU General Public License v3.0

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号