go get私有庫提示”410 Gone“ 解決辦法

問題現象

如果你在用go get 私有庫碰到如下類似錯誤:
在這裏插入圖片描述
410 Gone

解決方法

執行以下命令即可

go env -w GOSUMDB=off
go get xxxxxxxxx

原因分析

我們知道go會在go module啓用時在本地建立一個go.sum文件,用來存儲依賴包特定版本的加密校驗和。同時,Go維護下載的軟件包的緩存,並在下載時計算並記錄每個軟件包的加密校驗和。在正常操作中,go命令對照這些預先計算的校驗和去檢查某repo下的go.sum文件,而不是在每次命令調用時都重新計算它們。

在日常開發中,特定module版本的校驗和永遠不會改變。每次運行或構建時,go命令都會通過本地的go.sum去檢查其本地緩存副本的校驗和是否一致。如果校驗和不匹配,則go命令將報告安全錯誤,並拒絕運行構建或運行。在這種情況下,重要的是找出正確的校驗和,確定是go.sum錯誤還是下載的代碼是錯誤的。如果go.sum中尚未包含已下載的module,並且該模塊是公共module,則go命令將查詢Go校驗和數據庫以獲取正確的校驗和數據存入go.sum。如果下載的代碼與校驗和不匹配,則go命令將報告不匹配並退出。

Go 1.13提供了GOSUMDB環境變量用於配置Go校驗和數據庫的服務地址(和公鑰),其默認值爲”sum.golang.org”,這也是Go官方提供的校驗和數據庫服務(大陸gopher可以使用sum.golang.google.cn)。

出於安全考慮,建議保持GOSUMDB開啓。但如果因爲某些因素,無法訪問GOSUMDB(甚至是sum.golang.google.cn),可以通過下面命令將其關閉:

go env -w GOSUMDB=off

GOSUMDB關閉後,僅能使用本地的go.sum進行包的校驗和校驗了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章