當頂級模組和子模組導入時,Go 模組依賴關係偶爾會導致衝突模組及其子模組之一分別以不同版本導入。讓我們探討這個問題並找到解決方案。
問題概述
當專案中有兩個依賴項時,如下面的go.mod 檔案所示,go mod download 指令可能會導致下載共用子模組的不同版本。
module github.com/test-org/test-repo go 1.12 require ( github.com/foo/bar v1.0.0 github.com/raz/mataz v1.0.0 )
在程式碼中匯入子模組時,這可能會導致不明確的匯入錯誤,因為 go 工具不確定要選擇哪個版本。
解
當依賴項之一引用子模組的 pre-go-modules 版本時,就會出現問題。整個儲存庫的黑盒子導入與對子模組的模組引用發生衝突。
要解決此衝突,您可以強制對共享依賴項的引用使用支援 go-module 的版本。將以下行加入您的 go.mod 檔案:
replace ( github.com/shared/dependency => github.com/shared/dependency v1.2.0 )
確保指定的版本(本例中為 v1.2.0)已啟用 go-module(具有 go.mod 檔案)。
此解決方案之所以有效,是因為它確保對共享依賴項的所有引用都使用模組版本,從而消除了導致不明確導入錯誤的黑盒導入衝突。
以上是當頂層模組和子模組作為不同版本導入時,如何解決 Go 模組依賴衝突?的詳細內容。更多資訊請關注PHP中文網其他相關文章!