php小編小新解答為什麼在使用"go get -u"指令時會下載同一個套件的兩個版本。這個問題的原因在於go mod的工作原理。 go mod是Go語言在1.11版本引入的依賴管理工具,它會根據專案的go.mod檔案自動下載和管理依賴套件。當我們使用"go get -u"命令時,它會檢查go.mod檔案中的依賴套件版本,並嘗試下載最新的版本。然而,有些套件的版本更新可能會依賴其他套件的不同版本,因此go mod會下載兩個版本的套件以滿足依賴關係,這就是為什麼下載同一個套件的兩個版本的原因。
我使用 go get -u
來取得依賴 golang.org/x/[email protected]
的軟體包。我注意到它首先下載 golang.org/x/[email protected]
然後下載 golang.org/x/[email protected]
。
然後我執行go clean -modcache
和go get golang.org/x/text
,它下載了golang.org/x/text
的v0.4.0
,然後再go get -u entgo.io/ent
。這次 go 沒有下載 golang.org/x/[email protected]
#那麼,為什麼 go get -u
在本地沒有最新版本時同時下載舊版本和最新版本,以及為什麼在本地有最新版本時它不下載舊版本?
因為這是兩步驟過程
從程式設計的角度來看,沒有充分的理由將這些合併到「取得最新依賴項」的單一關注點。
來自 go 指令文件:
-u 標誌指示 get 更新提供命令列上命名的套件的依賴項的模組,以便在可用時使用較新的次要版本或補丁版本。
這表示 -u
專門處理您所取得的套件所依賴的模組,而不是您所取得的套件的模組。
此外,似乎-u
與將v0
版本中的任何更改視為主要版本更改的Go 慣用法無關,因此不能出於原則輕易推薦使用 -u
。 golang.org/x/test 的自述文件甚至說:
在 x/text 版本達到 1.0.0 之前,次要版本被視為主要版本。因此從 0.1.0 到 0.2.0 被認為是一個主要版本的提升。
以上是為什麼 go get 在使用 -u 時會下載同一包的兩個版本的詳細內容。更多資訊請關注PHP中文網其他相關文章!