必须安装 darwin/arm64 版本 go,唯一可信验证是 go version 输出含 darwin/arm64;若显示 amd64 则运行在 rosetta 下,需检查终端是否启用转译、清理旧版并重装 arm64 包。

必须装 darwin/arm64 版本的 Go,否则后续所有编译、调试、CGO 调用都会出隐性问题——不是报错,而是性能打折、运行崩溃或依赖加载失败。
确认你装的是真·ARM64版Go
别信“能跑就行”,只看 go version 输出里有没有 darwin/arm64。这是唯一可信证据。
-
go version必须输出类似go version go1.23.3 darwin/arm64 -
arch命令应返回arm64;如果返回amd64,说明终端正在 Rosetta 下运行(检查 iTerm2 是否勾选了“使用 Rosetta”,或 Terminal 是否被强制转译) -
go env GOARCH返回arm64,go env GOOS返回darwin -
file $(which go)应显示Mach-O 64-bit executable arm64,而非x86_64
Homebrew安装Go时容易踩的坑
Homebrew 在 M1/M2 上默认适配 ARM64,但旧缓存、残留 Intel 版本或非标准安装方式(比如曾用 brew install --cask golang)会导致它悄悄拉下 darwin/amd64 包。
Go语言(Golang)1.26.0版本提供 Go 官方 Windows amd64 MSI 安装包下载入口,版本号 1.26.0,可用于旧项目维护、兼容性测试和指定版本开发环境配置。
- 装前清旧:
brew uninstall go && brew cleanup - 装完立刻验证,别跳过
go version和file $(which go) - 避免混用:不要同时保留
/usr/local/go(Intel路径)和/opt/homebrew/bin/go(ARM路径),删干净再重装 - 如果项目强依赖旧版本(如 Go 1.18),用
brew install go@1.18,而不是brew install go,后者永远装最新稳定版
CGO_ENABLED=1 时程序一运行就崩怎么办
这不是 Go 的问题,是 C 依赖库架构不匹配。Homebrew 默认把 arm64 库装进 /opt/homebrew/lib,但如果你曾用 Rosetta 装过 sqlite3 或 openssl,实际装的是 x86_64 版本,路径却一样。
- 查库架构:
file /opt/homebrew/lib/libsqlite3.dylib,输出必须含arm64 - 重装前先退出 Rosetta:
arch -arm64 brew uninstall sqlite3 && arch -arm64 brew install sqlite3 - 编译时显式指定:
CGO_ENABLED=1 GOOS=darwin GOARCH=arm64 go build,避免继承污染的环境变量 - 临时排除干扰:
CGO_ENABLED=0 go build测试是否真由 CGO 引发——若能跑通,基本锁定问题域
要不要交叉编译 Universal Binary
除非你要分发给 Intel Mac 用户,否则完全没必要。原生 darwin/arm64 二进制在 M1/M2 上启动更快、内存占用更低、runtime.NumCPU() 返回真实核心数,goroutine 调度也更稳。
真正容易被忽略的是:Go Modules 默认启用,但老项目若还在用 GOPATH 模式,go get 可能静默失败或拉错版本——务必在项目根目录执行 go mod init your-module-name 显式开启模块模式,再补全 go.mod 依赖。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!










