文章目錄
- 1、go build指令(編譯指令)
- 1.1、go build 無參數編譯
- 1.2、go build 參數設定
- 1.3、示例
- 2、go clean指令(清除編譯檔案)
- 2.1、參數
- 2.2、示例
- 3、go run指令(編譯并運作)
- 3.1、參數
- 3.2、示例
- 4、go fmt指令(格式化代碼檔案)
- 4.1、參數
- 4.2、示例
- 5、go install指令(編譯并安裝)
- 5.1、參數
- 5.2、示例
- 6、go get指令(一鍵擷取包、編譯并安裝)
- 6.1、參數
- 6.2、示例
- 7、go generate指令(在編譯前自動化生成某類代碼)
- 7.1、參數
- 7.2、示例
- 8、go test指令(測試指令)
- 9、go pprof指令(性能分析指令)
1、go build指令(編譯指令)
1.1、go build 無參數編譯
// 編譯,生成可執行檔案
go build ***.go
// 運作可執行檔案,windows上會加上exe,linux沒有字尾
./可執行檔案
// go build+檔案清單,會生成多個可執行檔案
go build ***.go ***.go ……
1.2、go build 參數設定
參數 | 備注 |
-o | 編譯的包名 |
-v | 編譯時顯示包名 |
-p n | 開啟并發編譯,預設情況下該值為 CPU 邏輯核數 |
-a | 強制重新建構 |
-n | 列印編譯時會用到的所有指令,但不真正執行 |
-x | 列印編譯時會用到的所有指令 |
-race | 開啟競态檢測 |
1.3、示例
2、go clean指令(清除編譯檔案)
2.1、參數
go clean 指令是用來移除目前源碼包和關聯源碼包裡面編譯生成的檔案。這些檔案包括:
- _obj/ 舊的 object 目錄,由 Makefiles 遺留
- _test/ 舊的 test 目錄,由 Makefiles 遺留
- _testmain.go 舊的 gotest 檔案,由M akefiles 遺留
- test.out 舊的 test 記錄,由 Makefiles 遺留
- build.out 舊的 test 記錄,由 Makefiles 遺留
- *.[568ao] object 檔案,由 Makefiles 遺留
- DIR(.exe) 由 go build 産生
- DIR.test(.exe) 由 go test -c 産生
- MAINFILE(.exe) 由 go build MAINFILE.go 産生
- *.so 由 SWIG 産生
參數介紹
- -i 清除關聯的安裝的包和可運作檔案,也就是通過 go install 安裝的檔案
- -n 把需要執行的清除指令列印出來,但是不執行,這樣就可以很容易的知道底層是如何運作的
- -r 循環的清除在 import 中引入的包
- -x 列印出來執行的詳細指令,其實就是 -n 列印的執行版本
一般都是利用這個指令清除編譯檔案,然後 github 遞交源碼,在本機測試的時候這些編譯檔案都是和系統相關的,但是對于源碼管理來說沒必要。
go clean -i -n
cd /Users/astaxie/develop/gopath/src/mathapp
rm -f mathapp mathapp.exe mathapp.test mathapp.test.exe app app.exe
rm -f /Users/astaxie/develop/gopath/bin/mathapp
2.2、示例
3、go run指令(編譯并運作)
3.1、參數
go run 指令會編譯源碼,并且直接執行源碼的 main() 函數,不會在目前目錄留下可執行檔案。
go run 不能使用“go run+包”的方式進行編譯,如需快速編譯運作包,需要使用如下步驟來代替:
- 使用 go build 生成可執行檔案。
- 運作可執行檔案。
3.2、示例
4、go fmt指令(格式化代碼檔案)
4.1、參數
為了減少浪費在排版上的時間,go 工具集中提供了一個 go fmt 指令它可以幫你格式化你寫好的代碼檔案,使你寫代碼的時候不需要關心格式,隻需要在寫完之後執行go fmt <檔案名>.go ,代碼就會被修改成了标準格式。
gofmt -w -l src
,可以格式化整個項目。是以 go fmt 是 gofmt 的上層一個包裝的指令。
參數介紹
- -l 顯示那些需要格式化的檔案
- -w 把改寫後的内容直接寫入到檔案中,而不是作為結果列印到标準輸出。
- -r 添加形如“a[b:len(a)] -> a[b:]”的重寫規則,友善我們做批量替換
- -s 簡化檔案中的代碼
- -d 顯示格式化前後的 diff 而不是寫入檔案,預設是 false
- -e 列印所有的文法錯誤到标準輸出。如果不使用此标記,則隻會列印不同行的前 10 個錯誤。
- -cpuprofile 支援調試模式,寫入相應的 cpufile 到指定的檔案
4.2、示例
5、go install指令(編譯并安裝)
5.1、參數
go install 隻是将編譯的中間檔案放在 GOPATH 的 pkg 目錄下,以及固定地将編譯結果放在 GOPATH 的 bin 目錄下。這個指令在内部實際上分成了兩步操作:
- 第1步是生成結果檔案(可執行檔案或者 .a 包),
- 第2步會把編譯好的結果移到 $GOPATH/pkg 或者 $GOPATH/bin。
go install 的編譯過程有如下規律:
- go install 是建立在 GOPATH 上的,無法在獨立的目錄裡使用 go install。
- GOPATH 下的 bin 目錄放置的是使用 go install 生成的可執行檔案,可執行檔案的名稱來自于編譯時的包名。
- go install 輸出目錄始終為 GOPATH 下的 bin 目錄,無法使用-o附加參數進行自定義。
- GOPATH 下的 pkg 目錄放置的是編譯期間的中間檔案。
5.2、示例
go install 會在GOPATH的bin目錄下生成對應的可執行檔案
6、go get指令(一鍵擷取包、編譯并安裝)
6.1、參數
golang.org在國内由于一些衆所周知的原因無法直接通路,因為golang.org被牆的原因,可以使用github.com/golang/tools 和 golang.org/x/tools 是一樣的,下載下傳後複制到golang.org中。
都可以用:
go get -u + 遠端包
參數介紹:
- -d 隻下載下傳不安裝
- -f 隻有在你包含了 -u 參數的時候才有效,不讓 -u 去驗證 import 中的每一個都已經擷取了,這對于本地 fork 的包特别有用
- -fix 在擷取源碼之後先運作fix,然後再去做其他的事情
- -t 同時也下載下傳需要為運作測試所需要的包
- -u 強制使用網絡去更新包和它的依賴包
- -v 顯示執行的指令
6.2、示例
7、go generate指令(在編譯前自動化生成某類代碼)
7.1、參數
go generate 指令是從 Go1.4 開始設計的,用于在編譯前自動化生成某類代碼。
go generate 和 go build 是完全不一樣的指令,通過分析源碼中特殊的注釋,然後執行相應的指令。
//go:generate command arg1 arg2
這樣在同一個目錄下執行指令go generate就會自動運作指令command arg1 arg2。command可以是在PATH中的任何指令,應用非常廣泛。
有幾點需要注意:
- 該特殊注釋必須在 .go 源碼檔案中。
- 每個源碼檔案可以包含多個 generate 特殊注釋時。
- 顯示運作 go generate 指令時,才會執行特殊注釋後面的指令。
- 指令串行執行的,如果出錯,就終止後面的執行。
- 特殊注釋必須以"//go:generate"開頭,雙斜線後面沒有空格。
7.2、示例
8、go test指令(測試指令)
go test 指令,會自動讀取源碼目錄下面名為 *_test.go 的檔案,生成并運作測試用的可執行檔案。
主要提供“單元測試”和“基準測試”兩種方案
-
單元測試——測試和驗證代碼的架構
– 1) 單元測試指令行
– 2) 運作指定單元測試用例
– 3) 标記單元測試結果
– 4) 單元測試日志
-
基準測試——獲得代碼記憶體占用和運作效率的性能資料
– 1) 基礎測試基本使用
– 2) 基準測試原理
– 3) 自定義測試時間
– 4) 測試記憶體
– 5) 控制計時器
9、go pprof指令(性能分析指令)
go pprof 可以幫助開發者快速分析及定位各種性能問題,如 CPU 消耗、記憶體配置設定及阻塞分析。
- 安裝第三方圖形化顯式分析資料工具(Graphviz)
yum install graphiviz
- 安裝第三方性能分析來分析代碼包
go get github.com/pkg/profile