1. 程式人生 > 其它 >go build說明

go build說明

go build命令的說明

1. 獲取go build說明,重定向輸出到檔案

go help build >> go-build-intro.txt

2. 解讀go build

2.1 usage(用法)

go build [-o output] [build flags] [packages]

build命令會編譯由import path命名的包,連同它們的依賴項,但它不會安裝結果,就是會編譯成可執行檔案。而,具體要編譯成那種架構或者那種OS上的可執行檔案則由[build flags]進行定義。such as:GOOS=linux GOARCH=amd64

如果構建的引數是來自單個目錄的 .go 的檔案列表,build 命令執行時,將它們視為指定單個包的原始檔列表。(就是把他們作為一個package,所以這些.go檔案的package名字一定要一致,不然會報錯)

注意:_test.go結尾的go原始碼檔案會在編譯的時候被忽略,所以測試性的程式碼的檔名可以這麼結尾,從而避免編譯檢查!

2.2 build說明

編譯單個package main時,build 將生成的可執行檔案寫入以第一個原始檔命名的輸出檔案('go build ed.go rx.go' 寫入 'ed' 或 'ed.exe')或原始碼目錄( 'go build unix/sam' 寫入 'sam' 或 'sam.exe')。編寫 Windows 可執行檔案時會新增“.exe”字尾,linux下沒有後綴,這是二進位制可執行檔案。

這裡注意一種build的寫法,同一個package下,.go檔案存在方法呼叫,這個時候go build

的寫法要麼直接go build .,要麼go build A.go B.go ...,只寫入口 的go檔案是會報undefined錯。

當編譯多個包或單個非主包時, build 編譯包但丟棄生成的物件,僅用作檢查包是否可以構建。

2.3 build flags說明

-i 標誌安裝作為目標依賴項的包。不推薦使用-i 標誌。 編譯的包會自動快取。不過IDE goland預設好像是有這個的,所以建議手動刪除-i

build flags包括build構建、clean清理、get獲取、install安裝、list列出、run執行、和test測試命令。

flag describe
-a 強制重建已經是最新的包
-n 列印命令但不執行它們
-p n 可以並行執行的程式數量,例如構建命令或測試二進位制檔案。
預設值是可用的 CPU 數量。使用-p來指定一個數字。
-race 啟用“資料爭用”檢測(與多執行緒程式設計有關)
Supported only on linux/amd64, freebsd/amd64, darwin/amd64,
windows/amd64, linux/ppc64le and linux/arm64 (only for 48-bit VMA)
-msan 啟用與記憶體清理器的互操作。
Supported only on linux/amd64, linux/arm64 and
only with Clang/LLVM as the host C compiler.
On linux/arm64, pie build mode will be used.
-v 在編譯時列印包的名稱
-work 列印臨時工作目錄的名稱,退出時不會刪除它
-x 列印命令
-asmflags '[pattern=]arg list' 傳遞每個 go tool asm 呼叫的引數。
-buildmode mode build mode to use. See 'go help buildmode' for more.
-buildmode=archive
-buildmode=c-archive
-buildmode=c-shared
-buildmode=efault
-buildmode=shared
-buildmode=exe
-buildmode=pie
-buildmode=plugin
-compiler name 要使用的編譯器的名稱,如 runtime.Compiler(gccgo 或 gc)
-gccgofags '[pattern=]arg list' 傳遞每個 gccgo 編譯器/連結器呼叫的引數。
-gcflags '[pattern=]arg list' 傳遞每個 go 工具, 編譯呼叫的引數。
-installsuffix suffix 在包安裝目錄的名稱中使用的字尾,以便將輸出與預設構建分開。
If using the -race flag, the install suffix is automatically set to race or, if set explicitly,
has _race appended to it. Likewise for the -msan flag.
Using a -buildmode option that requires non-default compile flags has a similar effect.
-ldflags '[pattern=]arg list' 傳遞每個 go 工具,連結呼叫的引數
-linkshared 將連結到先前使用 -buildmode=shared 建立的共享庫的構建程式碼。
-mod mode module download mode to use: readonly, vendor, or mod.
-modcacherw 將新建立的目錄保留在模組快取中讀寫,而不是將它們設為只讀。
-modfile file
-overlay file
-pkgdir dir
-tags tag,list
-trimpath
-toolexec 'cmd args'

See also: go install, go get, go clean.