verifying module: xxx: initializing sumdb.Client: reading tree note: malformed note 解決方案
阿新 • • 發佈:2020-07-21
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/[email protected]: verifying module: github.com/gin-gonic/[email protected]: 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 不會去對下載的依賴包做安全校驗,存在一定的安全隱患
所以在本地使用的時候可以把這個環境變數關掉,保證包能正常拉下來。