Go语言拥有强大的跨平台编译能力,你可以在任一平台上,轻松编译出运行于其他任何操作系统与架构的可执行文件。
获取目标平台架构
使用 Go 跨平台编译前,需要知道目标系统的架构,这里以 Linux 系统和 Windows 系统为例;
在 Linux 系统中,可以使用命令uname -m查看:
uname -m
x86_64
在 Windows 系统中,可以在 Windows PowerShell 终端运行:
$env:PROCESSOR_ARCHITECTURE
AMD64
或者在 CMD 中使用:
echo %PROCESSOR_ARCHITECTURE%
AMD64
注意!相同的架构可能存在不同的名称;
比如在这个例子中x84_64和AMD64其实是同一种架构,
Go跨平台编译
Go 编译器使用两个系统环境变量来控制编译目标,GOOS和GOARCH;
常用的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