Golang 支持交叉编译, 在一个平台上生成然后再另外一个平台去执行。
 以下面代码为例
 build
 ├── main.go
 ├── go.mod
 
 main.go内容
package mainimport "fmt"func main() {fmt.Println("hello world")
}
 
windows系统上操作
1.cmd窗口编译
// 设置Linux编译环境
set CGO_ENABLED=0
set GOARCH=amd64
set GOOS=linux
go build main.go
 
修改的环境只在当前窗口生效,不影响整体环境
2.powershell窗口编译
// 设置Linux编译环境
$env:CGO_ENABLED="0"
$env:GOOS="linux"
$env:GOARCH="amd64"
go build main.go
 
修改的环境只在当前窗口生效,不影响整体环境
在cmd窗口和powershell窗口修改后,可以通过go env查看对应的变量已经更改。
Go交叉编译常用环境变量
- Go支持交叉编译通过以下几个环境变量来实现,一般交叉编译时,使用命令行临时更改以下环境变量的方式实现。
 - CGO_ENABLE:是否支持C语言版本的GO编译器,如Go代码中调用了C代码,则交叉编译时必须指定为1,且还必须要指定CC变量。
 - GOOS:目标操作系统,支持的选项为darwin\linux\windows。
 - GOARCH:目标操作系统的架构,支持的常用选项为amd64\386\arm\arm64. 常用的GOOS和GOARCH对照表如下
 
| GOOS | GOARCH | 说明 | 
|---|---|---|
| darwin | amd64 | Mac 64位系统 | 
| darwin | arm64 | Mac 64位系统(ARM) | 
| linux | amd64 | Linux 64位系统 | 
| linux | 386 | Linux 32位系统 | 
| linux | arm64 | Linux 64位系统(ARM) | 
| linux | arm | Linux 32位系统(ARM) | 
| windows | amd64 | Windows 64位系统 | 
| windows | 386 | Windows 32位系统 | 
| windows | arm64 | Windows 64位系统(ARM) | 
| windows | arm | Windows 32位系统(ARM) |