在软件构建过程中,我们经常遇到构建出的可执行程序或者应用的运行环境与开发环境不在同一个环境里的情况,即交叉编译的情况
C语言实现交叉编译的,是一些编译器的设计者,设计了针对不同平台的gcc交叉工具链
而golang的交叉编译的实现,是用到的是go build tool ,直接把支持不同平台的操作集成到了go build tool里,你可以通过这个tool来构建针对不同OS和architecture 的go应用
在我们的golang 开发环境里,直接go build ***.go其实,是根据你开发环境的环境变量GOOS和 GOARCH来构建对应的操作系统和架构的二进制可执行程序的
你可以给go env命令传递两个参数 GOOS GOARCH来查看你当前环境的系统和架构
go env GOOS GOARCH
输出
linux
amd64
我们可以看一下go build tool支持构建哪些系统和平台的应用
键入
go tool dist list
你会看到下面的输出
aix/ppc64
android/386
android/amd64
android/arm
android/arm64
darwin/amd64
darwin/arm64
dragonfly/amd64
freebsd/386
freebsd/amd64
freebsd/arm
freebsd/arm64
illumos/amd64
ios/amd64
ios/arm64
js/wasm
linux/386
linux/amd64
linux/arm
linux/arm64
linux/mips
linux/mips64
linux/mips64le
linux/mipsle
linux/ppc64
linux/ppc64le
linux/riscv64
linux/s390x
netbsd/386
netbsd/amd64
netbsd/arm
netbsd/arm64
openbsd/386
openbsd/amd64
openbsd/arm
openbsd/arm64
openbsd/mips64
plan9/386
plan9/amd64
plan9/arm
solaris/amd64
windows/386
windows/amd64
windows/arm
windows/arm64
可以看出输出是一组“/”分开的 类似key-value的键值对,“/”的左边表示GOOS,右边表示的是GOARCH
常见的linux,windows,darwin作为GOOS时,其实分别指的是Linux,Windows,和macOS系统
当我们想build出针对不同平台的可执行程序时候,只需要将本地的GOOS和GOARCH设置成对应的值即可
示例:
env GOOS=linux GOARCH=amd64 go build sayHello.go