Go 編譯 && 工具


編譯和工具鏈

Go 的工具鏈非常豐富,從獲取源碼、編譯、文檔、測試、性能分析,到源碼格式化、源碼提示、重構工具等應有盡有

  • 在 Go 中可以使用測試框架編寫單元測試,使用統一的命令行即可測試及輸出測試報告的工作
  • 基准測試提供可自定義的計時器和一套基准測試算法,能方便快速地分析一段代碼可能存在的 CPU 耗用和內存分配問題
  • 性能分析工具可以將程序的 CPU 耗用、內存分配、競態問題以圖形化方式展現出來

 

build 命令

Go 的編譯速度非常快(並發編譯),並且以 GOPATH 作為工作目錄和一套完整的工程目錄結構規則(GOPATH 需要提前配置好)

使用 go build 命令將源碼編譯為可執行文件,有很多種編譯方法,如無參數編譯、文件列表編譯、指定包編譯等,使用這些方法都可以輸出可執行文件

 

准備代碼目錄結構

代碼目錄結構(位置是 ./src/part_9_compile)

demo:main.go 模塊中 main() 函數調用了同包模塊 lib.go 里面的 pkgFunc() 函數

 

main.go 代碼:

package main
import "fmt"

func main(){
        //同包函數
	pkgFunc()
	fmt.Println("main func call")
}

 

lib.go 代碼:

package main
import "fmt"

func pkgFunc(){
	fmt.Println("call pakFunc success")
}

 

無參數編譯

如果源碼中沒有依賴 GOPATH 的包的引用,那么這些源碼可以使用無參數 go build 編譯:

 

go build + 文件列表

 

go build + 包

包名的路徑是相對於 GOPATH 下的 src 目錄開始的

 

添加 -o 參數可以指定輸出可執行文件的文件名,例如:

go build -o main part_9_compile/go_build

 

go build 編譯時的附加參數

表中的附加參數按使用頻率排列,根據需要選擇進行使用

附加參數 備  注
-v 編譯時顯示包名
-p n 開啟並發編譯,默認情況下該值為 CPU 邏輯核數
-a 強制重新構建
-n 打印編譯時會用到的所有命令,但不真正執行
-x 打印編譯時會用到的所有命令
-race 開啟競態檢測

 

go install 命令 

go install 的功能與 go build 類似,附加參數絕大多數都可以與 go build 通用,只是將編譯的中間文件放在 GOPATH 下的 pkg 目錄下,以及固定地將編譯結果放在 GOPATH 下的 bin 目錄中

go install 是建立在 GOPATH 上的,無法在其它的目錄中使用 go install,生成的可執行文件的名稱來自編譯時的包名無法使用 -o 參數指定文件名

 

run 命令

Python 語言可以在不輸出二進制的情況下,將代碼使用解釋器邊編譯邊執行,Go 雖然不使用解釋器,但可以使用 go run 命令來達到同樣的效果

go run 命令會編譯源碼,並且執行源碼的 main() 函數,不會在當前目錄生成可執行文件,工作目錄為當前目錄

 

在 go run 的后面可以添加參數,這部分命令行參數,可以被傳入到程序內部進行接收

package main
import (
    "flag"
    "fmt"
)

func main(){
	// 接收命令行參數,key,默認值,幫助
	var mode *string = flag.String("mode", "", "process mode")

	var level int
    flag.IntVar(&level, "level", 0, "process level")

    flag.Parse()
    fmt.Println(*mode, level)
}

調用:
go run main.go --mode="production" --level=1

運行結果:
production 1

  

后續補充 ~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM