go build 通过 goos 和 goarch 环境变量指定目标操作系统和架构,如 goos=linux goarch=amd64;启用 cgo_enabled=0 可避免跨平台编译失败,生成静态二进制;module path 不影响构建平台,但路径硬编码需用 filepath.join 等适配。
Go build 时如何指定目标操作系统和架构
Go 原生支持跨平台编译,不需要额外工具链,关键靠 GOOS 和 GOARCH 环境变量控制输出二进制的目标平台。不设默认按当前系统生成,设了就交叉编译。
常见组合示例:
GOOS=linux GOARCH=amd64 go build -o myapp-linux-amd64 main.goGOOS=darwin GOARCH=arm64 go build -o myapp-macos-arm64 main.goGOOS=windows GOARCH=386 go build -o myapp-win32.exe main.go
注意:GOOS=windows 生成的文件后缀必须是 .exe 才能双击运行;GOARCH=arm64 在 macOS 上需确认 Go 版本 ≥ 1.16(旧版不支持);GOARCH=386 实际对应 32 位 x86,不是“x86_64”的简写。
如何避免 CGO 导致跨平台失败
启用 CGO_ENABLED=0 是让 Go 编译纯静态二进制的关键一步。一旦项目依赖 C 库(比如用 os/user、net 包在某些系统上隐式调用 libc),默认开启 CGO 就会导致跨平台编译失败或运行时报错 standard_init_linux.go:228: exec user process caused: no such file or directory(常见于 Alpine 容器中)。
安全做法: