Golang 支持在一个平台下生成另一个平台可执行程序的交叉编译功能
go build
,是我们非常常用的命令,它可以启动编译,把我们的包和相关的依赖编译成一个可执行的文件
//查看环境变量
go env
*注意*
两个重要的环境变量GOOS和GOARCH
GOOS指目标操作系统:
darwin
freebsd
linux
windows
android
dragonfly
netbsd
openbsd
plan9
solaris
GOARCH指的是目标处理器的架构:
arm
arm64
386
amd64
ppc64
ppc64le
mips64
mips64le
s390x
GOOS和GOARCH有效组合,支持生成多种可执行程序 https://golang.org/doc/install/source#environment
The valid combinations of $GOOS and $GOARCH are:
$GOOS $GOARCH
aix ppc64
android 386
android amd64
android arm
android arm64
darwin amd64
darwin arm64
dragonfly amd64
freebsd 386
freebsd amd64
freebsd arm
illumos amd64
js wasm
linux 386
linux amd64
linux arm
linux arm64
linux ppc64
linux ppc64le
linux mips
linux mipsle
linux mips64
linux mips64le
linux s390x
netbsd 386
netbsd amd64
netbsd arm
openbsd 386
openbsd amd64
openbsd arm
openbsd arm64
plan9 386
plan9 amd64
plan9 arm
solaris amd64
windows 386
windows amd64
Mac下编译Linux, Windows平台的64位可执行程序:
$ CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go
$ CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go
Linux下编译Mac, Windows平台的64位可执行程序:
$ CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go
$ CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go
Windows下编译Mac, Linux平台的64位可执行程序:
$ SET CGO_ENABLED=0 SET GOOS=darwin3 SET GOARCH=amd64 go build main.go
$ SET CGO_ENABLED=0 SET GOOS=linux SET GOARCH=amd64 go build main.go