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 不會去對下載的依賴包做安全校驗,存在一定的安全隱患
所以在本地使用的時候可以把這個環境變量關掉,保證包能正常拉下來。