go run:go run 編譯並直接運行程序,它會產生一個臨時文件(但不會生成 .exe 文件),直接在命令行輸出程序執行結果,方便用戶調試。函數
go build:go build 用於測試編譯包,主要檢查是否會有編譯錯誤,若是是一個可執行文件的源碼(便是 main 包),就會直接生成一個可執行文件。測試
go install:go install 的做用有兩步:第一步是編譯導入的包文件,全部導入的包文件編譯完纔會編譯主程序;第二步是將編譯後生成的可執行文件放到 bin 目錄下($GOPATH/bin),編譯後的包文件放到 pkg 目錄下($GOPATH/pkg)。ui
用法:命令行
go build/install <packages>
說明:<package>是從$GOPATH/src路徑下面的目錄名調試
如:code
# 編譯安裝package lib go install lib
多個包名遞歸
# 同時編譯安裝lib2和lib/util兩個package go install lib2 lib/util
另外,若是當前工做路徑已經在package目錄下面了,則能夠不須要指定package名,例如:編譯器
$ cd $GOPATH/lib/util $ go 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,仍是某個路徑下面的main,例如lib/main都認爲是main,只要代碼層面的名字是main,便是可執行程序。
這裏強調一點:
包對應一個目錄,並不包含路徑信息。
包只包含一個目錄下面的文件,並不包含子目錄。
即,每個目錄都是獨立編譯成一個包文件的,這個包文件並不包含目錄下面的子目錄,由於子目錄是另外一個獨立的包,須要獨立編譯;文件路徑上的包含關係並無包之間的包含關係,包沒有路徑遞歸這個屬性。
關於庫的使用,即在編譯可執行文件時如何使用庫文件,是使用的pkg目錄下的編譯好的庫.a文件,仍是src目錄下面的庫源文件,請參考下面文件連接(謝AllenRen_061d同窗指正)。