### 在 Mac、Linux、Windows 下Go交叉編譯
Go語言支持交叉編譯,在一個平臺上生成另一個平臺的可執行程序,最近使用了一下,非常好用,這里備忘一下。
需要注意的是我發現golang在支持cgo的時候是沒法交叉編譯的
Mac 下編譯 Linux 和 Windows 64位可執行程序
```
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build
```
Linux 下編譯 Mac 和 Windows 64位可執行程序
```
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build
```
Windows 下編譯 Mac 和 Linux 64位可執行程序
```
SET CGO_ENABLED=0
SET GOOS=darwin
SET GOARCH=amd64
go build
SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=amd64
go build
```
GOOS:目標平臺的操作系統(darwin、freebsd、linux、windows)
GOARCH:目標平臺的體系架構(386、amd64、arm)
交叉編譯不支持 CGO 所以要禁用它
上面的命令編譯 64 位可執行程序,你當然應該也會使用 386 編譯 32 位可執行程序
很多博客都提到要先增加對其它平臺的支持,但是我跳過那一步,上面所列的命令也都能成功,且得到我想要的結果,可見那一步應該是非必須的,或是我所使用的 Go 版本已默認支持所有平臺。
注意:如果編譯完成以后服務器不能運行文件,記得查看一下是否有運行權限
`ls -l`如果沒有執行 `sudo chmod 777 student` student是你的編譯出來的文件名稱
如果在編譯的過程中出現了一下錯誤(測試過程中發現編譯gin框架的時候遇到了)
```
../mattn/go-isatty/isatty_tcgets.go:7:8: cannot find package "golang.org/x/sys/unix" in any of:
/usr/lib/golang/src/golang.org/x/sys/unix (from $GOROOT)
/root/go/src/golang.org/x/sys/unix (from $GOPATH)
```
由于限制問題,國內使用 go get 安裝 golang 官方包可能會失敗,不翻墻的情況下怎么解決這個問題?其實 golang 在 github 上建立了一個鏡像庫,如 https://github.com/golang/net 即是 https://golang.org/x/net 的鏡像庫
解決辦法:
```
cd ~/go/src
mkdir -p golang.org/x
cd golang.org/x
git clone https://github.com/golang/sys.git
```
### 說明
windows下面 powershell不行,要cmd