Golang 編譯 條件編譯

2021-07-11 18:21:32 字數 2212 閱讀 3281

條件編譯:

標籤編譯:( build tag )

// +build , ,

// +build (linux and 386) or (darwin and (not cgo))

以 + 開始,例如 // +build

支援 goos 與 goarch 並可以具有多個值,用 , 分割, 例如: // +build linux, darwin, freebsd

支援 不等條件 ! , 例如:\ +build !windows 即,不在windows環境下時,均可編譯此檔案。

支援 與非 邏輯, and or not 。

條件編譯需要前後空一行,否則無法識別。

檔案字尾:

***_.go ***__.go

支援 goos ,例如: curl_windows.go

支援 goarch, 例如: curl_386.go

支援 上述兩種疊加,但不可調換順序 ***__.go ,例如: curl_windows_amd64.go

如何選擇:

這兩者可以疊加使用,但注意不要出現冗餘,如:curl_windows.go 裡面寫 // +build windows 則重複了。

如果編譯的檔案是一一對應關係的話,使用檔案字尾更簡單些,如對每個 goos 生成乙個檔案。

如果有複雜條件的話,可以使用標籤編譯方式。如:

curl_windows.go 對應 windows 平台。

curl_others.go 裡面寫 \ +build !windows 對應 非windows 平台。

交叉編譯:

golang 1.5 ( 以上 ) 修改 goos goarch 後,即可。如:

export goos=windows

go install curl.go

​goos 與 goarch 支援的引數:

goos

編譯引數:

go get

不包含 main() 的話,執行後,不會產生任何檔案。如果想要生成 package 或 可執行檔案 需要使用 go install 。

包含 main() 的話,執行後,會在當前目錄生成 package 或 可執行性檔案

以 _ . 開頭的檔案會被忽略,例如:_***.go 或者 .***.go

支援上面描述的 條件編譯 。

常用引數:

-o - 指定編譯的檔名,可以帶上路徑。如: go build -o aaa.exe

-a - 強行對所有涉及到的**包(包含標準庫中的**包)進行重新構建,即使它們已經是最新的了。

-n - 列印編譯期間所用到的其它命令,但是並不真正執行它們。

-v - 列印出那些被編譯的**包的名字。

-x - 列印編譯期間所用到的其它命令。

-work - 列印出編譯時生成的臨時工作目錄的路徑,並在編譯結束時保留它。在預設情況下,編譯結束時會刪除該目錄。

go install

支援絕大多數的 go builid 引數,在 go build 執行的基礎上,即:如果定義了 gobin 的話,會在此目錄下生成可執行檔案。( 前提是需要包含 main() 方法 ), 而 go build 只會在當前資料夾下生成 可執行性檔案 。

godoc

-http=: 指定埠。

go list

-json - 列出當前包的資訊,包括依賴等, json 的基本字段含義:

go list -json 1

go list -json 2

-f - 檢視某個具體的字段,例如: go list -f } ,其中} 屬於 text/template 語法。

go run

包含了兩個動作,編譯 + 執行。

與 go build | go install 一樣,支援它們的引數。

go test

-c - 生成用於執行測試的可執行檔案,但不執行它。

-i - 安裝/重新安裝執行測試所需的依賴包但不編譯和執行測試**。

其它命令:

go version 檢視go當前的版本

go env 檢視當前go的環境變數

有用的引數:

-i - 安裝相應的包。編譯 +go install

-p n - 指定可以並行可執行的編譯數目,預設是cpu數目。

-race - 開啟編譯的時候自動檢測資料競爭的情況,目前只支援64位的機器。

參考:

golang條件編譯

golang中沒有類似c語言中條件編譯的寫法,比如在c 中可以使用如下語法做一些條件編譯,結合巨集定義來使用可以實現諸如按需編譯release和debug版本 的需求 ifndef define end但是golang支援兩種條件編譯方式 在源 裡新增標註,通常稱之為編譯標籤 build tag 編...

golang專案中使用條件編譯

golang中沒有類似c語言中條件編譯的寫法,比如在c 中可以使用如下語法做一些條件編譯,結合巨集定義來使用可以實現諸如按需編譯release和debug版本 的需求 ifndef define end golang支援兩種條件編譯的實現方式 build tags 是通過 注釋的形式實現的,要寫在檔...

條件編譯 if

1 為什麼需要條件編譯 客戶的需求在不停地發生變化,一會兒需要這個功能,一會兒不需要這個功能。我們可以使用條件編譯來方便地裁剪功能。2 條件編譯語句 if 條件編譯語句 if的形式是 1 if expression 2.3 elif expression 4.5 elif expression 6....