Go语言原生支持跨平台编译,只需设置GOOS和GOARCH环境变量即可构建目标平台二进制;常见组合包括windows/amd64、darwin/arm64、linux/386、linux/arm64;除macOS不可编译Windows GUI及Windows不可编译macOS外,其余组合开箱即用;启用cgo会受限,建议纯Go项目设CGO_ENABLED=0;推荐用shell脚本或Makefile统一管理多平台构建。

Go 语言原生支持跨平台编译,无需额外安装工具链,只需设置两个环境变量即可完成目标平台的二进制构建。
GOOS 和 GOARCH 是核心控制变量
Go 编译器通过 GOOS(目标操作系统)和 GOARCH(目标 CPU 架构)决定生成哪个平台的可执行文件。常见组合如下:
-
Windows 64位:
GOOS=windows GOARCH=amd64 go build -
macOS ARM64(M1/M2):
GOOS=darwin GOARCH=arm64 go build -
Linux 32位(i386):
GOOS=linux GOARCH=386 go build -
Linux ARM64(服务器/树莓派):
GOOS=linux GOARCH=arm64 go build
交叉编译无需安装额外 SDK 或工具链
Go 官方发行版已内置所有主流平台的编译支持(除 Windows 下编译 macOS 外,其余组合均开箱即用)。注意以下限制:
- macOS 上不能编译 Windows 的 GUI 程序(因缺少资源绑定工具),但控制台程序完全支持
- Windows 主机默认不支持生成 macOS 二进制(Apple 不允许在非 macOS 系统上签名或构建完整 Darwin 二进制)
- cgo 启用时跨平台编译会受限(需对应平台的 C 工具链和头文件),建议纯 Go 项目优先关闭 cgo:
CGO_ENABLED=0 go build
推荐构建脚本统一管理多平台输出
用简单 shell 脚本或 Makefile 可快速生成多个平台版本。例如创建 build.sh:
立即学习“go语言免费学习笔记(深入)”;
#!/bin/bash GOOS=linux GOARCH=amd64 go build -o bin/app-linux-amd64 . GOOS=linux GOARCH=arm64 go build -o bin/app-linux-arm64 . GOOS=windows GOARCH=amd64 go build -o bin/app-windows-amd64.exe . GOOS=darwin GOARCH=arm64 go build -o bin/app-darwin-arm64 .
运行 chmod +x build.sh && ./build.sh 即可批量产出。
验证与调试小技巧
生成后可用系统命令快速确认目标平台:
- Linux/macOS:用
file app-linux-amd64查看 ELF 架构信息 - Windows:用 PowerShell 运行
Get-Command .\app-windows-amd64.exe | Select-Object -ExpandProperty Definition(或直接双击测试) - Go 源码中可通过
runtime.GOOS和runtime.GOARCH获取当前运行时平台,便于条件编译
基本上就这些。Go 的跨平台能力简洁可靠,关键在于理解 GOOS/GOARCH 组合逻辑,并注意 cgo 和平台限制这两个易错点。










