1. 程式人生 > >go run go build go install 命令解釋

go run go build go install 命令解釋

  • go run:go run 編譯並直接執行程式,它會產生一個臨時檔案(但不會生成 .exe 檔案),直接在命令列輸出程式執行結果,方便使用者除錯。

  • go build:go build 用於測試編譯包,主要檢查是否會有編譯錯誤,如果是一個可執行檔案的原始碼(即是 main 包),就會直接生成一個可執行檔案。

  • go install:go install 的作用有兩步:第一步是編譯匯入的包檔案,所有匯入的包檔案編譯完才會編譯主程式;第二步是將編譯後生成的可執行檔案放到 bin 目錄下($GOPATH/bin),編譯後的包檔案放到 pkg 目錄下($GOPATH/pkg)。


go build與go install的

用法:

 go build/install <packages>

說明:<package>是從$GOPATH/src路徑下面的目錄名

如:

# 編譯安裝package lib
go install lib

多個包名

# 同時編譯安裝lib2和lib/util兩個package
go install lib2 lib/util

另外,如果當前工作路徑已經在package目錄下面了,則可以不需要指定package名,例如:

$ cd $GOPATH/lib/util
$ go install

功能:

  1. build

對於庫,只是驗證編譯能夠成功,不會生成目標庫檔案。

對於可執行程式,會生成目標可執行檔案,並放在當前目錄下面。

  1. install

對於庫,會生成目標庫檔案,並且放置到GOPATH/;對於可執行檔案,會生成目標可執行檔案,且放到GOPATH/BIN目錄下。

install 生成的包檔案,其包名是以目錄名命名的。

結論

  • 對於含主函式的go檔案,go build 和 go install 都能成功編譯它們並生成可執行檔案,就是生成的可執行檔案的地方不一樣

  • 對於不含主函式的go的包檔案,只有 go install 能在pkg中生成包檔案,而 go build 能對go的包檔案起作用,就是最終資料夾和執行 go build 之前一樣,好像 go build 什麼也沒做,很迷。

go install 與 go build, 都可以生成可執行檔案(生成的位置不同,install生成在GOPATH/BIN下,而build生成在當前目錄下);go install 能生成包檔案(GOPATH/PKG下,包名和目錄名同名),但 go build 不能生成包檔案

如何區分庫和可執行程式目錄

go編譯器如何區分這是一個庫目錄還是一個可執行檔案目錄,因為庫目錄需要安裝到GOPATH/pkg路徑下面,可執行程式需要安裝到GOPATH/bin路徑下面。規則就是:

  • 這個目錄的包名字是不是main。如果是,則go認為這是一個可執行程式目錄;如果不是,go就認為這是一個庫目錄

注意:這裡包名並不是目錄名,和不和路徑相關,也就是說不管是專案頂級目錄下的main,還是某個路徑下面的main,例如lib/main都認為是main,只要程式碼層面的名字是main,即是可執行程式。

這裡強調一點:

  • 包對應一個目錄,並不包含路徑資訊。

  • 包只包含一個目錄下面的檔案,並不包含子目錄。

即,每一個目錄都是獨立編譯成一個包檔案的,這個包檔案並不包含目錄下面的子目錄,因為子目錄是另一個獨立的包,需要獨立編譯;檔案路徑上的包含關係並沒有包之間的包含關係,包沒有路徑遞迴這個屬性。

庫的使用

關於庫的使用,即在編譯可執行檔案時如何使用庫檔案,是使用的pkg目錄下的編譯好的庫.a檔案,還是src目錄下面的庫原始檔,請參考下面檔案連結(謝AllenRen