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
功能:
- build
對於庫,只是驗證編譯能夠成功,不會生成目標庫檔案。
對於可執行程式,會生成目標可執行檔案,並放在當前目錄下面。
- 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