在 Ubuntu 上做 Golang 开发,跨平台编译几乎是必会技能。毕竟你不可能每次都为了打个 Windows 包就换台机器。Go 的交叉编译机制简洁得令人舒适——只需改几个环境变量,就能把代码打包成任何主流平台的可执行文件。下面直接上手。

第一步,确认 Go 已经装好。如果还没装,去 https://golang.org/dl/ 下载 Ubuntu 对应的版本,或者直接用包管理器,没什么难度。
第二步,打开终端,设置两个关键的环境变量:GOOS 和 GOARCH。前者指定目标操作系统,后者指定架构。比如要编译 Windows 64 位程序,运行:
export GOOS=windows
export GOARCH=amd64
其他常见组合如下:
- macOS(Darwin):
GOOS=darwin,GOARCH=amd64 - Linux:
GOOS=linux,GOARCH=amd64(这是默认值,不设也行) - FreeBSD:
GOOS=freebsd,GOARCH=amd64 - OpenBSD:
GOOS=openbsd,GOARCH=amd64 - NetBSD:
GOOS=netbsd,GOARCH=amd64
值得一提的是,Go 支持的目标平台远不止这些,还有 ARM、MIPS 等,但上面几个是日常最常用的。
第三步,环境变量设好后,直接 go build 编译你的源文件。假设你的入口文件是 main.go:
go build main.go
编译成功后,当前目录下会生成一个可执行文件——注意,它的名字和扩展名会随目标平台自动适配(比如 Windows 下会带 .exe)。你可以直接将它扔到对应系统里运行,完全不需要额外配置。
第四步,如果后续想切回编译本地平台,记得取消设置:
unset GOOS
unset GOARCH
这样环境变量就恢复默认值了。当然,你也可以直接关闭终端重新打开,效果一样。
整个过程就这么简单。Go 的交叉编译不需要额外安装任何工具链,也不需要修改代码,这是它相较于其他语言的一大优势。下次需要给同事发个 Windows 工具,或者部署到树莓派上,几行命令就能搞定。