天天看點

Go開發 之 Go的 9個 基本指令

文章目錄

  • ​​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、示例

Go開發 之 Go的 9個 基本指令

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、示例

Go開發 之 Go的 9個 基本指令

3、go run指令(編譯并運作)

3.1、參數

go run 指令會編譯源碼,并且直接執行源碼的 main() 函數,不會在目前目錄留下可執行檔案。

go run 不能使用“go run+包”的方式進行編譯,如需快速編譯運作包,需要使用如下步驟來代替:

  • 使用 go build 生成可執行檔案。
  • 運作可執行檔案。

3.2、示例

Go開發 之 Go的 9個 基本指令

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、示例

Go開發 之 Go的 9個 基本指令

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開發 之 Go的 9個 基本指令

go install 會在GOPATH的bin目錄下生成對應的可執行檔案

Go開發 之 Go的 9個 基本指令

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、示例

Go開發 之 Go的 9個 基本指令

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、示例

Go開發 之 Go的 9個 基本指令

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