Golang本身内置了跨平台编译的支持,不需要额外安装复杂的依赖工具,只需要通过简单的环境变量配置和编译命令调整,就可以在一台设备上生成多个不同平台的可执行文件,非常适合需要多系统部署的项目场景。

Golang跨平台编译的核心原理
Golang的编译器会根据GOOS和GOARCH两个环境变量来确定目标编译平台,其中GOOS指定目标操作系统,GOARCH指定目标架构。我们只需要修改这两个变量的值,再执行常规的go build命令,就可以生成对应平台的可执行文件。
常见平台对应的参数值
| 目标系统 | GOOS值 | 常见GOARCH值 |
|---|---|---|
| Windows | windows | amd64、386 |
| Mac | darwin | amd64、arm64 |
| Linux | linux | amd64、386、arm64 |
不同开发系统下的编译操作
在Linux或Mac系统下编译
如果当前开发环境是Linux或者Mac,默认情况下编译生成的是当前系统的可执行文件,要生成其他平台的文件,只需要在编译前临时设置对应的环境变量即可。
首先准备一个简单的测试代码,保存为main.go:
package main
import "fmt"
func main() {
fmt.Println("这是跨平台编译的测试程序")
}
生成Windows 64位可执行文件的命令如下:
# 编译Windows 64位可执行文件,后缀为.exe GOOS=windows GOARCH=amd64 go build -o test_win.exe main.go
生成Mac 64位可执行文件的命令如下:
# 编译Mac 64位可执行文件,Mac下可执行文件没有固定后缀 GOOS=darwin GOARCH=amd64 go build -o test_mac main.go
生成Linux 64位可执行文件的命令如下:
# 编译Linux 64位可执行文件 GOOS=linux GOARCH=amd64 go build -o test_linux main.go
在Windows系统下编译
如果开发环境是Windows,使用命令提示符或者PowerShell设置环境变量的方式略有不同,需要使用set命令临时设置变量。
生成Linux 64位可执行文件的命令如下:
# 命令提示符下执行 set GOOS=linux set GOARCH=amd64 go build -o test_linux main.go
如果使用PowerShell,命令如下:
# PowerShell下执行 $env:GOOS="linux" $env:GOARCH="amd64" go build -o test_linux main.go
批量生成多平台可执行文件
如果每次手动执行单个编译命令比较繁琐,可以写一个简易的脚本批量生成所有平台的可执行文件。以下是Linux/Mac下的批量编译脚本示例:
#!/bin/bash
# 定义需要编译的平台列表
platforms=(
"windows/amd64"
"darwin/amd64"
"linux/amd64"
)
# 遍历平台列表执行编译
for platform in "${platforms[@]}"
do
# 分割操作系统和架构
GOOS=${platform%/*}
GOARCH=${platform#*/}
# 定义输出文件名
output_name="test_${GOOS}_${GOARCH}"
if [ "$GOOS" = "windows" ]; then
output_name="${output_name}.exe"
fi
# 执行编译
echo "正在编译 ${GOOS} ${GOARCH} 平台文件"
GOOS=$GOOS GOARCH=$GOARCH go build -o $output_name main.go
if [ $? -eq 0 ]; then
echo "编译成功:$output_name"
else
echo "编译失败:${GOOS} ${GOARCH}"
fi
done
注意事项
- 如果项目中使用了CGO相关的代码,跨平台编译需要目标平台的C编译器支持,否则可能会出现编译错误,这时候可以选择关闭CGO,设置
CGO_ENABLED=0再编译。 - 不同架构的可执行文件不能混用,比如amd64架构编译的文件不能在386架构的系统上运行,需要根据目标设备的实际架构选择对应的
GOARCH值。 - 编译生成的文件可以直接拷贝到目标平台运行,不需要在目标平台安装Golang环境。
Golang跨平台编译Windows可执行文件Mac可执行文件Linux可执行文件修改时间:2026-07-16 23:24:32