[Go] Go 產生不同平台的執行檔
Go 本身就是一個跨平台的程式語言,所以將專案編譯成其他作業系統能夠執行的檔案也是有支援的,今天就來筆記一下,如何在 Windows 作業系統編譯 Mac 的執行檔案。
說明
在執行 go build .
的時候,會讀取讀 GO 的環境變數 GOOS
和 GOARCH
來決定要產生什麼樣平台的執行檔案。 如下圖所示,我執行 go env
來查看環境變數, 可以看到 GOARCH=amd64
,GOOS=windows
,這表示我執行 go build .
的時候會產生 windows 64位元 作業系統的執行檔案。
產生其他作業系統的執行檔
我這邊會以在 windows 作業系統上,產生 macOS 執行檔為範例。 根據 Cross compile Go on OSX? 此篇的說明,要編譯成 macOS 的話,要設定 GOOS=linux
, GOARCH=arm64
,請參考下方暫時性調整 GO 環境變數的方式產生 macOS 的執行檔。
- bash
1 | $ SET GOOS=linux&SET GOARCH=arm64&go build . |
產生結果如下圖:
使用 $ SET GOOS=linux
的方式不會真的寫回 GO 環境變數,關掉 cmd 後此設定就會消失,如果真的要長久調整 GO 環境變數的話,需使用 $ go env -w GOOS=linux
的方式才可以。
GOOS, GOARCH 參考列表 => Optional environment variables
cmd/go: unsupported GOOS/GOARCH pair windows/arm64
我在使用 $ go env -w GOOS=linux
寫環境變數的時候,不小心造成 cmd/go: unsupported GOOS/GOARCH pair linux SET GOARCH=arm64/arm64 錯誤,我只要使用 $ go env
命令就會出現錯誤,導致我無法把環境變數改回來,錯誤圖如下:
而這個原因是 GOOS
, GOARCH
沒有匹配造成的。 匹配列表請參考 Optional environment variables。
處理方法很簡單,先用 $ SET
方式把環境變數設定好,再使用 $ go env -w
的方式寫回去就可以了,如下方以我 windows 環境為範例,解決匹配錯誤的指令。
- bash
1 | $ set GOOS=windows |
延伸閱讀
[Cross compilation with Go 1.5]
[Building GoLang Package for Linux (or any) from Windows]
[SettingGOPATH]
[Optional environment variables for $GOOS and $GOARCH]
[Setting environment variables for Windows cmd temporarily, to run a program, in a single line?]