我剛剛繼承了一個Go項目,該項目的go.mod文件缺少聲明的依賴項,但依賴項位于go.sum文件中:...
cloud.google.com/go/storage v?.?.? <- this is the missing entry in go.mod
...這些是 go.sum 文件中的條目:...
cloud.google.com/go/storage v1.0.0/go.mod h1:<some hash>
cloud.google.com/go/storage v1.5.0/go.mod h1:<some hash>
cloud.google.com/go/storage v1.6.0/go.mod h1:<some hash>
cloud.google.com/go/storage v1.8.0/go.mod h1:<some hash>
cloud.google.com/go/storage v1.10.0 h1:<some hash>
cloud.google.com/go/storage v1.10.0/go.mod h1:<some hash>
...我的問題是:為什么 go.sum 文件中有 5 個版本?如果有其他依賴于這些特定版本的庫,那么所有5個庫都會編譯到二進制文件中嗎?由于未聲明依賴項,哪個版本的庫將鏈接到我的應(yīng)用程序代碼?我試圖在Go文檔中找到解釋,但找不到,任何幫助都值得贊賞。
1 回答

慕桂英546537
TA貢獻1848條經(jīng)驗 獲得超10個贊
這些依賴關(guān)系很可能是傳遞依賴關(guān)系,即你所依賴的包(或它們所依賴的包等)的依賴關(guān)系。go.sum 包含模塊的所有依賴項(直接或其他)的行,以便生成可重現(xiàn)。
來自 Go 博客:
除了 go.mod 之外,go 命令還維護一個名為 go.sum 的文件,其中包含特定模塊版本內(nèi)容的預(yù)期加密哈希。
...
go 命令使用 go.sum 文件來確保這些模塊的將來下載檢索與第一次下載相同的位,以確保項目所依賴的模塊不會意外更改,無論是出于惡意、意外還是其他原因。go.mod 和 go.sum 都應(yīng)該簽入到版本控制中。
包含的包的版本取決于您所依賴的包的 go.mod 文件。您可能依賴于多個包,每個包可能依賴于不同版本的依賴項。
它們是否最終出現(xiàn)在生成中取決于包含它們的依賴項是否編譯到二進制文件中。測試文件/包可能不會發(fā)生這種包含的一個例子,這通常取決于測試庫及其依賴項。這些永遠不會包含在您的普通可執(zhí)行文件中。go build
您可以檢查將包含在構(gòu)建中的軟件包列表,如下所示:
go list -m all
你應(yīng)該以防萬一運行以刪除任何實際上不再需要的依賴項。go mod tidy
- 1 回答
- 0 關(guān)注
- 121 瀏覽
添加回答
舉報
0/150
提交
取消