go build與go install的區別

go install 和 go build都是用來編譯生成可執行的二進制文件,但二者有一些小小的區別,下面來看看它們的區別。緩存

若是新建了一個包mymath。函數

go install

一、只要進入對應的應用包目錄,而後執行go install,就能夠安裝了工具

二、在任意的目錄執行以下代碼go install mymathui

若是mymath是一個工具包,那install後,會在pkg目錄下生成一個mymath.a的二進制文件;spa

若是mymath是一個包含main函數的主線程代碼文件,則會在bin目錄下生成一個mymath的二進制文件。若是加了-i 參數,則會把程序引入的依賴包編譯緩存到pkg中,若是包未作更改,下次編譯則直接使用緩存。線程

 

go build

直接在當前目錄下,生成mymath二進制文件,不會生成依賴包的二進制文件。若是帶上-i參數,則效果跟go install是同樣的。調試

 

補充

go編譯出來的可執行文件很是大,是由於把依賴的庫和程序同樣編譯發佈的,至關於gcc --static。若是想讓生成的文件變小能夠用-ldflags "-s   -w"參數。code

-s去掉符號表(而後panic時候的stack trace就沒有任何文件名/行號信息了,這個等價於普通C/C++程序被strip的效果),
-w去掉DWARF調試信息,獲得的程序就不能用gdb調試了。
-s和-w也能夠分開使用,通常來講若是不打算用gdb調試,
-w基本沒啥損失。-s的損失就有點大了。ip

相關文章
相關標籤/搜索