條件編譯:
標籤編譯:( 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....