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

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 消耗、內存分配及阻塞分析。

性能分析首先需要使用 runtime.pprof 包嵌入到待分析程序的入口和結束處。runtime.pprof 包在運行時對程序進行每秒 100 次的採樣,最少採樣 1 秒。然後將生成的數據輸出,讓開發者寫入文件或者其他媒介上進行分析。

go pprof 工具鏈配合 Graphviz 圖形化工具可以將 runtime.pprof 包生成的數據轉換爲 PDF 格式,以圖片的方式展示程序的性能分析結果。

  • 安裝第三方圖形化顯式分析數據工具(Graphviz)
yum install graphiviz
  • 安裝第三方性能分析來分析代碼包
go get github.com/pkg/profile
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章