Golang 支持交叉編譯, 在一個平臺上生成而後再另一個平臺去執行。 並且編譯的工具【build】這個工具是Golang 內置的,不須要你去下載第三方的包啥的,賊方便。linux
# linux 下去執行
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go
# Windows 下去執行
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go
複製代碼
# Mac 下去執行
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go
# Windows 下執行
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go
複製代碼
須要寫一個批處理程序,在裏面去設置,由於windows 下的 terminal 不支持shell , 這跟 Mac 和 Linux下的有點不一樣golang
# Mac 下執行
SET CGO_ENABLED=0
SET GOOS=darwin
SET GOARCH=amd64
go build main.go
複製代碼
# Linux 去執行
SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=amd64
go build main.go
複製代碼
go env 能夠列出咱們的golang 默認環境變量,在shell中當咱們只想一次性更改其環境變量時,就能夠經過在shell中設置變量的方式來更改這個環境變量。shell
//默認
>#go env
GOARCH="amd64"
GOBIN=""
GOCACHE="/root/.cache/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/data/go"
GOPROXY=""
GORACE=""
GOROOT="/usr/local/go"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build171002917=/tmp/go-build -gno-record-gcc-switches"
>#
//更改
>#CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go env
GOARCH="amd64" # 變動了
GOBIN=""
GOCACHE="/root/.cache/go-build"
GOEXE=".exe"
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="windows" # 變動了
GOPATH="/data/go"
GOPROXY=""
GORACE=""
GOROOT="/usr/local/go"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
CC="gcc"
CXX="g++"
CGO_ENABLED="0" # 變動了
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-m64 -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build668031908=/tmp/go-build -gno-record-gcc-switches"
>#
// 更改後
>#go env
GOARCH="amd64" # 還原了
GOBIN=""
GOCACHE="/root/.cache/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux" # 默認值
GOPATH="/data/go"
GOPROXY=""
GORACE=""
GOROOT="/usr/local/go"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build240557259=/tmp/go-build -gno-record-gcc-switches"
>#
複製代碼