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 不会去对下载的依赖包做安全校验,存在一定的安全隐患
所以在本地使用的时候可以把这个环境变量关掉,保证包能正常拉下来。
宝剑锋从磨砺出 梅花香自苦寒来