verifying module: xxx: initializing sumdb.Client: reading tree note: malformed note 解決方案


Golang verifying module: xxx: initializing sumdb.Client: reading tree note: malformed note 解決方案


問題描述

在使用 go mod 拉取github上的一些包時碰到了一個非常令人頭疼的問題,想使用一個包卻拉不下來報了以下錯誤:

go: finding module for package github.com/gin-gonic/gin
go: downloading github.com/gin-gonic/gin v1.6.3
hello.go:4:8: github.com/gin-gonic/gin@v1.6.3: verifying module: github.com/gin-gonic/gin@v1.6.3: initializing sumdb.Client: reading tree note: malformed note
note:
go.sum database tree
1353790
AVGYxnGGs0MvNF8Cz1JeGnh+z+DibzwwAxszDkhl+g4=

— sum.golang.org Az3gri/j25iP5oWam/FLqOhVMy9zUpIZ004fCG8UxXhnuYAIFhacZYBl/4hhTihVsDxC64ynGws6jcIAxj4B6df/sgI=

這是個啥錯誤呢?中文翻譯過來就是 sumdb 校驗異常
然就這個坑,卻困擾了我一下午......

解決方案

先給出解決方案吧

go env -w GOSUMDB=off

問題分析

為啥會有上面那個異常呢,咱們打印一下環境變量來看一看究竟。

$ go env
set GO111MODULE=on
set GOARCH=amd64
set GOBIN=
set GOCACHE=D:\Go\cache
set GOENV=C:\Users\zhengguanghui\AppData\Roaming\go\env
set GOEXE=.exe
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOINSECURE=
set GONOPROXY=
set GONOSUMDB=
set GOOS=windows
set GOPATH=E:\workspace\Go
set GOPRIVATE=
set GOPROXY=https://goproxy.io,direct
set GOROOT=D:\Go
set GOSUMDB=sum.golang.org
set GOTMPDIR=
set GOTOOLDIR=D:\Go\pkg\tool\windows_amd64
...

這個錯誤仿佛與 set GOSUMDB=sum.golang.org 這個脫不了干系,本着深挖到底的決心,古狗一下這個參數是用來干啥使的,哦 某位知友已經給出了答案:

GOSUMDB(go checksum database)是Go官方為了go modules安全考慮,設定的module校驗數據庫,服務器地址為:sum.golang.org

你在本地對依賴進行變動(更新/添加)操作時,Go 會自動去這個服務器進行數據校驗,保證你下的這個代碼庫和世界上其他人下的代碼庫是一樣的。

和go.mod一樣,Go 會幫我們維護一個名為go.sum的文件,它包含了對依賴包進行計算得到的校驗值

環境變量GOSUMDB可以用來配置你使用哪個校驗服務器和公鑰來做依賴包的校驗

Go1.13 中當設置了 GOPROXY="https://proxy.golang.org" 時 GOSUMDB 默認指向 "sum.golang.org",其他情況默認都是關閉的狀態。如果設置了 GOSUMDB 為 “off” 或者使用 go get 的時候啟用了-insecure參數,Go 不會去對下載的依賴包做安全校驗,存在一定的安全隱患

所以在本地使用的時候可以把這個環境變量關掉,保證包能正常拉下來。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM