先确认 Homebrew 是否安装并更新:which brew 无输出需安装,有输出则运行 brew update && brew doctor;再用 brew install go 安装 Go,并将 /opt/homebrew/bin(Apple Silicon)或 /usr/local/bin(Intel)加入 PATH;最后设 GOPATH=$HOME/go、PATH="$GOPATH/bin:$PATH",启用 GO111MODULE=on,验证 go version 和 go mod init 正常。

确认 Homebrew 是否已安装并更新到最新版
Mac 上装 Go 最省心的方式是用 brew,但很多人卡在第一步:要么没装 brew,要么装了但长期没更新导致后续命令失败(比如 brew install go 报 No available formula with the name "go")。先打开终端执行:
which brew
如果没输出,说明没装;有输出则继续运行:
brew update && brew doctor
确保没有红色警告。常见坑点:
-
brew被国内网络卡住时,别手动换源后只改了brew本身,忘了同步改homebrew-core和homebrew-cask的远程地址,否则brew install go仍会超时 - macOS Sonoma 之后部分用户遇到
brew权限报错,需先运行sudo chown -R $(whoami) $(brew --prefix)/*
用 brew 安装 Go 并验证二进制路径
brew install go 成功后,Go 会被装到 /opt/homebrew/bin/go(Apple Silicon)或 /usr/local/bin/go(Intel),但这个路径不会自动加入 $PATH —— 这是新手最常漏的一步,导致终端敲 go version 提示 command not found。
立即学习“go语言免费学习笔记(深入)”;
执行以下命令确认实际安装位置:
brew --prefix go
输出类似 /opt/homebrew/Cellar/go/1.22.5,真正的可执行文件在 bin/go 子目录下。所以你需要把该 bin 目录加进 $PATH,而不是 brew --prefix go 的根目录。
实操建议:
- 编辑
~/.zshrc(macOS Catalina 及以后默认 shell 是 zsh) - 追加一行:
export PATH="/opt/homebrew/bin:$PATH"(Apple Silicon)或export PATH="/usr/local/bin:$PATH"(Intel) - 别写成
export GOPATH=...或硬编码具体 Go 版本路径,brew升级 Go 后路径不变,但版本子目录会变
设置 GOPATH 和 Go Modules 的取舍
Go 1.16+ 默认启用 GO111MODULE=on,意味着新建项目不再强制依赖 GOPATH。但很多老教程还在教设 GOPATH,容易引发混淆。
如果你只是写新项目、用 go mod init 管理依赖,GOPATH 可以完全不设 —— Go 会把下载的依赖缓存到 $HOME/go/pkg/mod,这是默认行为,无需干预。
只有当你需要:
- 维护遗留的 GOPATH 模式项目(无
go.mod文件) - 想把
go install编译出的二进制统一放在某处(如$GOPATH/bin),并加入$PATH
才需要显式配置。推荐做法:
- 设
export GOPATH=$HOME/go(保持默认值,避免意外覆盖) - 同时加
export PATH="$GOPATH/bin:$PATH",方便后续用go install安装 CLI 工具(如gopls,delve) - 不要把项目源码放到
$GOPATH/src下,现代 Go 项目应放在任意路径,靠go.mod定位
验证环境变量和模块行为是否正常
改完 ~/.zshrc 后,必须执行 source ~/.zshrc,再逐项检查:
go version<br>go env GOPATH<br>go env GOROOT<br>go env GO111MODULE
预期输出:
-
go version显示版本号,不是command not found -
GOPATH是$HOME/go(或你自定义的路径),GOROOT是/opt/homebrew/Cellar/go/*/libexec(非/usr/local/go) -
GO111MODULE是on(不是空或auto)
最后建个测试项目验证模块是否真生效:
mkdir ~/test-go && cd ~/test-go<br>go mod init example.com/test<br>go get rsc.io/quote@v1.5.2<br>cat go.mod
如果 go.mod 里出现了 rsc.io/quote v1.5.2,说明模块代理、缓存、环境变量全部走通。最容易被忽略的是:改完 .zshrc 后没重新加载,或者开了多个终端窗口只在其中一个里执行了 source,其他窗口依然用旧环境。

















