Friday, March 18, 2022

[Golang] Go 1.16 中關於go get和go install的變動

 

[前言]

其實Go 1.16已經 Release 很久了,但最近發現關於 go get 的行為跟以前不一樣並且多了 go install 這個 tool,所以本篇記錄一下需要注意的地方。

[關於go get和go install的變動]

我目前Golang的版本如下:


$ go version
go version go1.16.2 linux/amd64

在 Go 1.16 中,行為變更是 go build 和 go test 不會自動編輯 go.mod 了,go get 將二進位制安裝相關的功能都轉移到了 go install, 僅作為用於編輯 go.mod 檔案的命令,例如為專案增加外部的模組,在後續版本(計劃是 Go 1.17)中刪掉 go get 安裝二進位制的功能。

需要注意的是 go install <package>@<version> 是從 1.16 開始增加的,無論你當前是否在一個模組下,此命令都會在 $GOPATH/bin 下安裝指定版本的工具。另外,go install <package>@<version> 只能安裝有main package的軟體包(換句話說是有可執行的程式)。

此外由於 Go 1.16 中 GO111MODULE 預設是開啟的,go install 不會修改 go.mod 之類的檔案(不會造成任何模組衝突的意外)。

總結以上資訊,Go 1.16 中將進行如下處理:

  • 通過在程式碼中修改 import 語句,來修改 go.mod:
  •  go get 可用於新增新模組;
  •  go mod tidy 刪除掉無用的模組;


Reference:


No comments: