先检查PATH是否包含Go路径:官方.pkg安装需确保/usr/local/go/bin在PATH中,Homebrew安装则应为/opt/homebrew/bin(Apple Silicon)或/usr/local/bin;编辑~/.zshrc添加GOROOT和PATH后执行source ~/.zshrc生效。

go version 命令报 command not found 怎么办
说明:这不是 Go 没装好,而是系统根本找不到 go 这个可执行文件。核心问题永远是 PATH 没包含 /usr/local/go/bin(手动安装)或 /opt/homebrew/bin(Homebrew 安装)。
实操建议:
立即学习“go语言免费学习笔记(深入)”;
- 先确认 Go 实际安装路径:
ls -d /usr/local/go/bin或which go(如果已存在旧版本) - 编辑 shell 配置文件:
nano ~/.zshrc(macOS Catalina 及以后默认用 Zsh)或nano ~/.bash_profile(旧版 macOS) - 追加两行(注意顺序,
$GOPATH/bin要放在后面,避免覆盖系统命令):export GOROOT=/usr/local/go export PATH=$PATH:$GOROOT/bin
- 执行
source ~/.zshrc生效后,再运行go version验证
GOPROXY 不生效导致 go mod tidy 卡住
说明:国内访问 proxy.golang.org 失败是常态,但配置了 GOPROXY 仍卡住,大概率是值写错、没生效,或被 go env -w 覆盖了。
实操建议:
立即学习“go语言免费学习笔记(深入)”;
- 检查当前生效值:
go env GOPROXY—— 输出应为类似https://goproxy.cn,direct - 若为空或不对,直接写入:
go env -w GOPROXY=https://goproxy.cn,direct - 避免在
~/.zshrc里重复设置GOPROXY,否则go env -w和环境变量冲突,优先级混乱 - 验证是否起作用:运行
go list -m -f '{{.Dir}}' golang.org/x/net,几秒内返回路径即成功;卡住超过 10 秒说明代理未走通
GOROOT 和 GOPATH 的关系与常见误配
说明:GOROOT 是 Go 安装目录,只读;GOPATH 是你写代码、放依赖的地方,可自定义。两者混淆会导致 go build 找不到包、go install 输出错位置。
Go 配置库,使用 spf13/viper — 分层优先级(flag > env >file > KV > default),提供 BindPFlag/BindPFlags、SetEnvPrefix + SetEnvKeyReplace 等功能。
实操建议:
立即学习“go语言免费学习笔记(深入)”;
-
GOROOT通常不用手动设 —— 官方安装包会自动识别/usr/local/go;只有多版本共存时才需显式指定 -
GOPATH推荐设为$HOME/go,并在~/.zshrc中添加:export GOPATH=$HOME/go export PATH=$PATH:$GOPATH/bin
- 不要把项目源码放在
$GOROOT/src下——那是 Go 自身源码目录,放进去会导致go get行为异常 - Go 1.16+ 默认启用模块模式(
GO111MODULE=on),GOPATH对依赖管理影响变小,但仍影响go install输出位置和工具安装路径
Mac 上 Homebrew vs 官方 .pkg 安装选哪个
说明:两者都能用,但行为差异直接影响后续维护成本。Homebrew 管理方便,但路径不标准;官方 pkg 路径固定,但升级需重装。
实操建议:
立即学习“go语言免费学习笔记(深入)”;
- 日常开发推荐 Homebrew:
brew install go,升级只需brew upgrade go,且自动配置PATH - 若已手动安装过官方 pkg,务必先清理:
sudo rm -rf /usr/local/go,否则which go可能指向旧版 - Homebrew 安装的
go在/opt/homebrew/bin/go(Apple Silicon)或/usr/local/bin/go(Intel),GOROOT会自动设为对应路径 - CI/CD 或 Docker 构建中,统一用官方 tar.gz 解压方式,避免依赖 Homebrew 环境
真正容易被忽略的是:每次修改 ~/.zshrc 后,新开终端窗口不会自动 reload,必须手动 source 或重启终端;而 VSCode 的集成终端默认不读取 shell 配置,需在设置里开启 "terminal.integrated.inheritEnv": true。

















