php小編子墨將為大家介紹Go語言中的”go get”和”go install”命令在go.sum文件上的使用。在Go語言項目中,go.sum文件用于記錄項目所依賴的包及其版本信息,確保項目在構建和部署過程中的穩定性和一致性。通過理解”go get”和”go install”命令對go.sum文件的影響,可以更好地管理和控制項目的依賴關系,提高開發效率和代碼質量。讓我們一起來了解這兩個命令的具體用法吧!
問題內容
我使用的是 go 1.20.3
我剛剛使用 go get 和 go install 安裝了這個軟件包
go get -v github.com/mactsouk/go/simplegithub go install github.com/mactsouk/go/simplegithub
登錄后復制
我的 go.sum 文件中有:
github.com/mactsouk/go v0.0.0-20180603081621-6a282087f7bd h1:tqjgx/jaxlj3rnl7ps7xzqlvth8rl/dusa8wpe9w4y0= github.com/mactsouk/go v0.0.0-20180603081621-6a282087f7bd/go.mod h1:trtlpc1xi1zoqdba/cixgds+fcaizdqupmrflet5dbi=
登錄后復制
go.mod 文件是:
module calculator go 1.20 require github.com/mactsouk/go v0.0.0-20180603081621-6a282087f7bd // indirect
登錄后復制
在我的 $home/go/pkg/mod/github.com/mactsouk/ 上 aod
dr-xr-xr-x 5 user staff 160 jul 4 18:42 [email protected]
登錄后復制
$home/go/bin/ 上什么也沒有,只有兩個文件,為什么 go install 沒有復制 simplegithub 模塊的二進制文件?
drwxr-xr-x 4 user staff 128 Jun 26 23:37 . drwxr-xr-x 4 user staff 128 Jun 26 23:35 .. -rwxr-xr-x 1 user staff 3410064 Jun 26 23:35 go-outline -rwxr-xr-x 1 user staff 28237216 Jun 26 23:37 gopls
登錄后復制
go get 和 go install 之間有區別嗎?為什么我在 go.sum 上將此模塊文件兩次?
解決方法
go get 與 go install
Go 中的 go get 和 go install 命令有不同的用途:
go get 用于從遠程存儲庫檢索和下載包及其依賴項。它使用下載的軟件包的版本更新 go.mod 和 go.sum 文件。如果包已經存在,go get 會將其更新到最新版本。
go install 在項目的 GOPATH 或 GOBIN 中編譯并安裝包。它不會更新 go.mod 或 go.sum 文件。相反,它使用這些文件中的信息來確定要使用的依賴項的正確版本。
就您而言,當您運行 go get 時,它會下載并安裝軟件包 github.com/mactsouk/go/simpleGitHub 及其依賴項。此操作使用下載的軟件包的版本更新了 go.mod 和 go.sum 文件。
當您隨后對同一個包運行 go install 時,不需要再次下載該包,因為它已經存在于本地 Go 模塊緩存中。因此,go install 使用了緩存中的現有包及其版本,并且沒有修改 go.mod 或 go.sum 文件。
您看到該模塊在 go.sum 文件中列出兩次的原因是它包含模塊版本 (v0.0.0-20180603081621-6a282087f7bd) 及其相應的 go.mod 文件,其中包含校驗和。這是預期的行為并確保依賴項的完整性。
綜上所述,go get 和 go install 的目的不同,go.sum 文件中模塊重復是正常的。