Go 編譯和工具鏈

pardon110發表於2019-10-26

Go語言編譯和工具鏈

  • 範圍

    • 獲取原始碼、編譯、文件、測試、效能分析,原始碼格式化、原始碼提示、重構工具等
  • go build 編譯

    • 目的 輸出可執行檔案
    • 方法
    • 無引數編譯
      • 使用條件 原始碼中沒有依賴 GOPATH 的包引用
    • 檔案列表編譯
      • go build+檔案列表
      • 編譯同目錄的多個原始碼檔案時,可以在 go build 的後面提供多個檔名
      • 此時可執行檔案預設選擇檔案列表中第一個原始碼檔案作為可執行檔名輸出
      • -o 指定輸出可執行檔名
      • -race 競態條件檢測
    • 指定包編譯
      • go build+包 在設定 GOPATH 後,可以直接根據包名進行編譯
  • go run

    • go run 命令會編譯原始碼,並且直接執行原始碼的 main() 函式,不會在當前目錄留下可執行檔案
  • go install

    • 引數絕大多數都可以與 go build 通用
    • 將編譯的中間檔案放在 GOPATH 的 pkg 目錄下,固定地將編譯結果放在 GOPATH 的 bin 目錄下
    • GOPATH 下的 pkg 目錄放置的是編譯期間的中間檔案
  • go get

    • 藉助程式碼管理工具透過遠端拉取或更新程式碼包及其依賴包,並自動完成編譯和安裝
    • -v 顯示操作流程的日誌及資訊,方便檢查錯誤
    • -u 下載丟失的包,但不會更新已經存在的包
    • -d 只下載不安裝
  • go test測試系統

    • 單元測試規約
    • 測試檔案以 _test 結尾
    • 用例函式以 Test為字首
    • 測試用例檔案用go test指令來執行,不需要main()作為函式入口
    • 執行指定單元測試
      • -run 跟隨的測試用例的名稱支援正規表示式
      • 預設執行檔案內的所有測試用例。可以使用-run引數選擇需要的測試用例單獨執行
    • 標記單元測試結果
      • 終止當前測試用例時,使用 FailNow方法
    • 單元測試
      • 每個測試用例可能併發執行,使用 testing.T 提供的日誌輸出可以保證日誌跟隨這個測試上下文一起列印輸出
    • 基準測試(benchmark)
    • 獲得程式碼記憶體佔用和執行效率的效能資料
    • 測試程式碼需要保證函式可重入性及無狀態
    • 原理
      • 基準測試框架對一個測試用例的預設測試時間是 1 秒
      • 當以 Benchmark 開頭的基準測試用例函式返回時還不到 1 秒, testing.B 中的 N 值遞增
    • 引數
      • -benchtime引數可以自定義測試時間
      • -bench=. 測試檔案中的所有基準測試用例
    • 測試記憶體
      • 基準測試可以對一段程式碼可能存在的記憶體分配進行統計
      • go test -v -bench=Alloc -benchmem benchmark_test.go
    • 控制計時器
      • 讓計時器只在需要的區間進行測試
      • 計數器內部不僅包含耗時資料,還包括記憶體分配的資料
  • go pprof

    • 快速分析及定位各種效能問題,如 CPU 消耗、記憶體分配及阻塞分析
  • Graphviz

    • Graphviz 是一套透過文字描述的方法生成圖形的工具包。描述文字的語言叫做 DOT。
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章