1.编译go文件, 在使用 go mod 拉取github上的一些包时碰到了一个非常令人头疼的问题,想使用一个包却拉不下来报了以下错误:
go build -tags "zookeeper" -ldflags '-X "nbservice/version.TAG=" -X "nbservice/version.VERSION=2e3018b48910419745b4785e061189b16c6f8818" -X "nbservice/version.AUTHOR=peanut" -X "nbservice/version.BUILD_INFO=add ci" -X "nbservice/version.BUILD_DATE=2023-05-09 17:57:36"' -gcflags "-N" -i -o ./bin/nbservice ./cmd/ctservice
go: github.com/anacrolix/envpprof@v1.3.0/go.mod: verifying module: github.com/anacrolix/envpprof@v1.3.0/go.mod: initializing sumdb.Client: checking tree#16250362: Get "https://sum.golang.org/tile/8/2/000.p/247": dial tcp 172.217.160.81:443: i/o timeout
翻译过来就是 sumdb 校验异常
解决方案
go env -w GOSUMDB=off
相关环境变量打印如下
GO111MODULE="on"
GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/peanut/Library/Caches/go-build"
GOENV="/Users/peanut/Library/Application Support/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOINSECURE=""
GONOPROXY=""
GONOSUMDB=""
GOOS="darwin"
GOPATH="/Users/peanut/apps/works/go"
GOPRIVATE=""
GOPROXY="https://goproxy.cn"
GOROOT="/usr/local/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"
GCCGO="gccgo"
AR="ar"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD="/Users/peanut/apps/works/go/src/nbservice/go.mod"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/k0/6j_zdmmx43zctycxk58s8tw00000gn/T/go-build806628533=/tmp/go-build -gno-record-gcc-switches -fno-common"
GOSUMDB(go checksum database)是Go官方为了go modules安全考虑,设定的module校验数据库,服务器地址为:sum.golang.org 你在本地对依赖进行变动(更新/添加)操作时,Go 会自动去这个服务器进行数据校验,保证你下的这个代码库和世界上其他人下的代码库是一样的。 和go.mod一样,Go 会帮我们维护一个名为go.sum的文件,它包含了对依赖包进行计算得到的校验值 环境变量GOSUMDB可以用来配置你使用哪个校验服务器和公钥来做依赖包的校验 关掉后: GOSUMDB="off"
一般最好不要关闭