必须先确认芯片架构:运行arch或uname -m,输出arm64为Apple Silicon,amd64为Intel;若跳过此步,后续安装可能被Rosetta 2转译,导致go build生成x86_64二进制而非原生arm64,引发双击打不开等问题。

确认芯片架构再动手,别让 Rosetta 欺骗你
直接执行 arch 或 uname -m,输出 arm64 就是 Apple Silicon(M1/M2/M3),amd64 是 Intel。这一步跳过,后面所有操作都可能白忙——哪怕 go version 看似能跑,也可能是 Rosetta 2 在背后转译,导致 go build 出来的二进制仍是 x86_64,在本地无法原生运行。
常见错误现象:
-
go version显示darwin/amd64,但你用的是 M 系列 Mac -
file $(which go)输出含x86_64,而非arm64 - 安装后
go run hello.go成功,但go install生成的可执行文件双击打不开或提示“无法打开”
必须验证:安装完成后立刻运行 go version 和 file $(which go),两者都得带 darwin/arm64 和 arm64 字样才算过关。
Homebrew 安装 Go@1.26.4:路径和 GOROOT 得手动补上
Homebrew 装 go@1.26 确实省事,但它不会自动设 GOROOT,尤其当你同时装过其他版本(比如 go 主干版)时,/usr/local/bin/go 可能指向错的版本。
立即学习“go语言免费学习笔记(深入)”;
实操建议:
- 先清理旧版:
brew uninstall go && brew uninstall go@1.26,再brew cleanup - 装指定版本:
brew install go@1.26 - 查真实路径:
brew --prefix go@1.26(典型输出如/opt/homebrew/opt/go@1.26) - 在
~/.zshrc中显式设置:export GOROOT=/opt/homebrew/opt/go@1.26/libexecexport PATH=$PATH:$GOROOT/bin - 别依赖 Homebrew 自动软链——
ls -l /usr/local/bin/go可能指向已卸载的老版本,直接失效
手动安装 .pkg 包:路径固定但环境变量仍要配
官网或清华镜像下载的 darwin-arm64.pkg 会默认装到 /usr/local/go,路径确定,但 macOS 不会自动把 /usr/local/go/bin 加进 PATH,尤其 zsh 下几乎必然失败。
关键动作:
- 下载务必选带
arm64的包,页面自动推荐的darwin-amd64.pkg是陷阱 - 安装后检查:
ls -d /usr/local/go应存在,且ls /usr/local/go/bin/go可执行 -
~/.zshrc至少加两行:export GOROOT=/usr/local/goexport PATH=$PATH:$GOROOT/bin - 别漏掉
source ~/.zshrc;新开终端不生效是新手最高频问题
GO111MODULE 和 CGO_ENABLED:新项目默认开模块,但 C 依赖必须 arm64
Go 1.26.4 默认 GO111MODULE=on,对新项目没问题,但老项目或含 cgo 的库(如 SQLite、OpenSSL)会出问题——Homebrew 装的 libpq 或 openssl 若是 x86_64 版,CGO_ENABLED=1 就编译不过。
应对方式:
- 新项目起步:运行
go env -w GO111MODULE=auto(比on更兼容) - 含 C 依赖时:
brew install openssl@3(Homebrew 默认装 arm64 版),再设export CGO_CPPFLAGS="-I$(brew --prefix openssl@3)/include"和export CGO_LDFLAGS="-L$(brew --prefix openssl@3)/lib" - 交叉编译边缘设备用:
GOOS=linux GOARCH=arm64 go build,无需额外工具链,Go 原生支持
最容易被忽略的是:go mod download 失败时,大概率不是网络问题,而是 GOPROXY 没配国内源——加一句 go env -w GOPROXY=https://goproxy.cn,direct 就能解一大半。



















