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.