最近想用 air 做 Go 项目的热重载开发,但在安装时遇到了一个经典问题:
zsh: command not found: air明明已经执行了安装命令,为什么终端还是找不到 air?这篇文章就来完整复盘整个过程,并给出一劳永逸的解决方案。
❌ 错误方式:还在用 go get 安装命令行工具?
我一开始尝试:
go get -u github.com/air-verse/air结果报错:
go: go.mod file not found in current directory or any parent directory.
'go get' is no longer supported outside a module.这是因为从 Go 1.17 开始,官方已弃用 go get 来安装可执行程序。go get 现在仅用于管理模块依赖,不能用来安装全局命令。
✅ 正确做法是使用 go install + 版本标签:
go install github.com/air-verse/air@latest这条命令会把 air 编译并安装到 $GOPATH/bin 目录下(通常是 ~/go/bin/air)。
🔍 验证是否安装成功
运行:
ls $(go env GOPATH)/bin/air输出:
/Users/dengxiwang/go/bin/air说明二进制文件确实存在!但为什么直接输入 air 还是提示“command not found”?
答案很简单:~/go/bin 没有加入系统的 PATH 环境变量。
✅ 永久解决方案:将 $GOPATH/bin 加入 PATH
由于我使用的是 zsh(macOS Catalina 及以后的默认 shell),需要修改 ~/.zshrc 文件。
1. 编辑配置文件
echo 'export PATH="$PATH:$(go env GOPATH)/bin"' >> ~/.zshrc这行命令做了两件事:
动态获取
GOPATH(避免硬编码路径)将
$GOPATH/bin添加到PATH末尾
2. 重新加载配置
source ~/.zshrc3. 验证
新开一个终端窗口,运行:
which air
# 输出:/Users/dengxiwang/go/bin/air
air -v
# 输出:air version v1.50.3🎉 成功!
💡 小贴士
所有通过
go install xxx@version安装的 Go 工具(如golangci-lint、mockgen、ginkgo等)都会放在同一个目录,只需配置一次 PATH。使用
$(go env GOPATH)而非写死路径,让配置更具移植性。