Go语言拥有强大的跨平台编译能力,你可以在任一平台上,轻松编译出运行于其他任何操作系统与架构的可执行文件。

获取目标平台架构

使用 Go 跨平台编译前,需要知道目标系统的架构,这里以 Linux 系统和 Windows 系统为例;

在 Linux 系统中,可以使用命令uname -m查看:

uname -m
x86_64

在 Windows 系统中,可以在 Windows PowerShell 终端运行:

$env:PROCESSOR_ARCHITECTURE
AMD64

或者在 CMD 中使用:

echo %PROCESSOR_ARCHITECTURE%
AMD64

注意!相同的架构可能存在不同的名称;

比如在这个例子中x84_64AMD64其实是同一种架构,

Go跨平台编译

Go 编译器使用两个系统环境变量来控制编译目标,GOOSGOARCH

常用的GOOS有:

GOOS 系统
windows Windows
linux Linux
darwin macOS

常见的GOARCH有:

GOARCH 系统
386 32位 x86
amd64 64位 x86
arm 32位 ARM
arm64 64位 ARM

你可以使用go env命令查看当前 GOOS、GOARCH 的值;

在 Linux 下,可以使用以下命令临时修改值,关闭终端则失效:

export GOOS=linux
export GOARCH=amd64

# 单行生效
GOOS=linux GOARCH=amd64 go build

在 Windows 下可以使用以下命令临时修改值,关闭终端则失效:

# CMD 
set GOOS=linux
set GOARCH=amd64

# PowerShell
$env:GOOS="linux"
$env:GOARCH="amd64"

也可以使用go env -w命令永久设置:

go env -w GOOS=linux
go env -w GOARCH=amd64

# 一次设置多个
go env -w GOOS=linux GOARCH=amd64

设置好环境变量后,使用 GO 进行编译,则会生成目标系统和架构的可执行文件;

编译示例

在 Windows 下编译 Linux 系统 arm64 架构的可执行文件:

# PowerShell
$env:GOOS="linux"
$env:GOARCH="arm64"
go build -o myapp-linux main.go

# CMD
set GOOS=linux
set GOARCH=arm64
go build -o myapp-linux main.go

在 Linux 下编译 Windows 系统 amd64 架构的可执行文件:

GOOS=windows GOARCH=amd64 go build -o myapp.exe main.go