Golang 編譯打包-構建集成


golang編譯方式一般分為兩種,一種是源碼編譯,另外一個是交叉編譯

1.源碼編譯

這種方式需要在機器上安裝相應的go sdk,可以參考環境部署相關的文章,這里不再敘述;我們只需要把項目代碼copy到相應的機器上,然后再項目目錄中,執行命令:go build ./main.go -o outdir,編譯速度非常快,接着在outdir文件中即可看到編譯后的二進制文件或exe文件

2.交叉編譯

在編譯到linux等其他目標平台前,需要在機器上安裝MingGW c++編譯環境。更多信息請參考官網文檔:https://github.com/golang/go/wiki#release-specific-information

GOOS:目標平台的操作系統(darwin、freebsd、linux、windows) 
GOARCH:目標平台的體系架構(386、amd64、arm) 
交叉編譯不支持 CGO 所以要禁用它,如果要使用CGO,需要源碼編譯構建。

The valid combinations of GOOS and GOARCH are:

GOOS

GOARCH

aix

ppc64

android

386

android

amd64

android

arm

android

arm64

darwin

386

darwin

amd64

darwin

arm

darwin

arm64

dragonfly

amd64

freebsd

386

freebsd

amd64

freebsd

arm

illumos

amd64

js

wasm

linux

386

linux

amd64

linux

arm

linux

arm64

linux

ppc64

linux

ppc64le

linux

mips

linux

mipsle

linux

mips64

linux

mips64le

linux

s390x

netbsd

386

netbsd

amd64

netbsd

arm

openbsd

386

openbsd

amd64

openbsd

arm

openbsd

arm64

plan9

386

plan9

amd64

plan9

arm

solaris

amd64

windows

386

windows

amd64


2.1 Windows主機編譯Linux,MAC客戶端

Windows主機編譯Windows客戶端

SET CGO_ENABLED=0
SET GOOS=windows
SET GOARCH=amd64
go build -o abc-demo-windows.exe main.go

Windows主機編譯LINUX客戶端

SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=amd64
go build -o abc-demo-linux main.go

Windows主機編譯MAC客戶端

SET CGO_ENABLED=0
SET GOOS=darwin
SET GOARCH=amd64
go build -o abc-demo-mac main.go

2.2 Linux主機編譯Widows,MAC客戶端

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o abc-demo-linux main.go
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -o adc-demo-mac main.go
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o abc-demo-windows.exe main.go

2.3 MAC主機編譯Widows,linux客戶端

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o abc-demo-linux main.go
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -o abc-demo-mac main.go
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o abc-demo-windows.exe main.go

這里以windows下編譯linux amd64示例,直接編寫一個bat腳本,然后雙擊執行

編譯比源碼編譯少慢了點,結果如下:

可以看到成功的編譯了一個二進制文件hai,該文件可以直接在目標平台上以 ./hai &的方式運行起來。

3.多平台一鍵打包

下面就來介紹一下打包神器 GoReleaser


goreleaser是一個自動化打包工具,解放雙手,省去腳本編寫,同時還支持對接CI/CD。
下面我們通過一個簡單的例子來說明怎么使用 GoReleaser

3.1. 工具安裝


下載安裝 goreleaser (go get -u -v github.com/goreleaser/goreleaser
安裝后執行 goreleaser -v 命令判斷是否安裝成功

3.2. 創建demo工程


這次以hai項目為例,也可以自己新建一個hello world項目嘗試

3.3. 初始化配置


然后在該項目根目錄執行 goreleaser init ,將會生成一個.goreleaser.yml配置文件

打開文件

3.4. 修改配置


默認配置文件需要稍作修改以滿足我們的需求
我們的demo項目沒有使用go generate,需要把 - go generate ./... 注釋掉
添加我們需要的目標操作系統類型及架構
經過修改后的配置文件如下

3.5. 打包

然后執行打包命令來驗證是否打包成功
goreleaser --snapshot --skip-publish --rm-dist

 

 

 

可以看到編譯的情況及速度


打包成功后將會在項目根目錄/dist下生成各種不同平台的可執行文件

3.6.配置文件說明

id:打包后目錄前綴
goos:目標系統
goarch:目標CPU架構
snapshot.name_template:生成壓縮包名稱前綴
詳細配置請參考官網
build配置: 編譯配置
archives配置:打包配置
goos和goarch是乘積關系,至於為什么沒有生成windows_arm64這樣的可執行程序 是因為windows不能再arm上跑。
golang官網也列出了goos和goarch的兼容表。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM