根本原因是Go的bin目录未加入PATH环境变量;需将/usr/local/go/bin(macOS/Linux)或C:\Go\bin(Windows)永久添加到对应shell的初始化文件中,并重载配置后验证。
go
这是最常见现象:下载安装包双击安装(macOS/Linux)或运行安装程序(Windows)后,终端输入 go version 提示 command not found。根本原因不是 Go 没装好,而是系统没把 Go 的可执行目录加进 PATH 环境变量。
Go 安装后,二进制文件默认放在:
/usr/local/go/bin
/usr/local/go/bin(官方二进制包)或 $HOME/go/bin(源码编译)C:\Go\bin(默认路径,若自定义则以实际为准)必须确保这个 bin 目录出现在 PATH 中,否则 shell 找不到 go 命令。
/usr/local/go/bin 到 PATH
临时加 PATH(仅当前终端有效)可以直接运行:export PATH=$PATH:/usr/local/go/bin,但关掉终端就失效。永久生效需写入 shell 初始化文件:
~/.bash_profile 或 ~/.bashrc,追加一行:export PATH=$PATH:/usr/local/go/bin
~/.zshrc,加同样那行~/.config/fish/config.fish,用 set -gx PATH $PATH /usr/local/go/bin
$env:PATH += ";C:\Go\bin"(仅当前会话),永久需用 [Environment]::SetEnvironmentVariable 修改用户级变量改完别忘了重载配置:source ~/.zshrc(zsh)或 source ~/.bashrc(bash)。验证是否生效:echo $PATH 看输出里有没有对应路径,再执行 go version。
GOROOT 和 GOBIN 什么时候必须手动设?绝大多数情况不用设 GOROOT —— Go 安装程序已内置默认值(如 /usr/local/go),且 go 命令能自动识别。只有当你解压多个 Go 版本并手动切换时,才需要显式设置 GOROOT 指向目标版本根目录。
GOBIN 更少需要手动设。它控制 go install 编译出的可执行文件放哪,默认是 $GOPATH/bin(Go 1.18+ 默认 $HOME/go/bin)。除非你希望所有 go install 的工具统一放到某个非默认位置(比如 /usr/local/bin),才设 GOBIN 并确保该路径也在 PATH 中。
注意:GOBIN 和 GOROOT/bin 是两回事 —— 前者放你 install
的第三方工具,后者放 Go 自带命令(go、gofmt 等)。
Windows 用户常犯两个错误:
C:\Go\bin,但没重启终端(CMD/PowerShell/WSL)—— Windows 不会自动广播环境变量变更给已启动的进程go 却忘了它用的是自己的 mintty + bash 环境,不读 Windows 系统 PATH,得单独在 ~/.bash_profile 里加 export PATH="/c/Go/bin:$PATH"
验证方式很直接:打开新 CMD,运行 where go(Windows)或 which go(macOS/Linux),看输出路径是否匹配你预期的安装位置。
PATH 配置本身不难,难的是它藏在 shell 初始化链、GUI 终端继承逻辑、多环境共存(如 WSL + CMD + IDE 内置终端)这些地方。每次换终端或升级系统,都值得快速跑一遍 go version 和 which go。