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.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章