Golang支持交叉编译,也就是说你在32位平台的机器上开发,可以编译生成64位平台上的可执行程序.mac 下可以编译linux 下的执行程序 又或者windows下的执行程序
交叉编译依赖下面几个环境变量:
$GOARCH 目标平台(编译后的目标平台)的处理器架构(386、amd64、arm)
$GOOS 目标平台(编译后的目标平台)的操作系统(darwin、freebsd、linux、windows)

OS ARCH OS versionlinux 386 / amd64 / arm >= Linux 2.6darwin 386 / amd64 OS X (Snow Leopard + Lion)freebsd 386 / amd64 >= FreeBSD 7windows 386 / amd64 >= Windows 2000
➜ ~ go envGOARCH="amd64"GOBIN=""GOEXE=""GOHOSTARCH="amd64"GOHOSTOS="darwin"GOOS="darwin"GOPATH="/Users/song/go"GORACE=""GOROOT="/usr/local/go"GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"CC="clang"GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/v6/87fb06yx7yb46b79xlnj1y_m0000gn/T/go-build215820159=/tmp/go-build -gno-record-gcc-switches -fno-common"CXX="clang++"CGO_ENABLED="1"➜ ~ uname -aDarwin localhost 16.3.0 Darwin Kernel Version 16.3.0: Thu Nov 17 20:23:58 PST 2016; root:xnu-3789.31.2~1/RELEASE_X86_64 x86_64➜ ~[root@74780b70d0c0 Desktop]# uname -aLinux 74780b70d0c0 4.9.4-moby #1 SMP Wed Jan 18 17:04:43 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux[root@74780b70d0c0 Desktop]#

明白了上面就开始交叉编译go的可执行程序了

编译对应平台下的执行文件
到源代码目录下执行:

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.goCGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.goCGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.goCGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.goSET CGO_ENABLED=0SET GOOS=darwinSET GOARCH=amd64go build main.go
SET CGO_ENABLED=0SET GOOS=linuxSET GOARCH=amd64go build main.go

不带前面参数的 go build 只是编译出开发环境适用的执行文件。