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.