go依赖下载失败的根本原因是goproxy、goprivate和gonosumdb未正确配对:国内需设goproxy为goproxy.cn,direct以fallback直连,私有域名必须同时加入goprivate与gonosumdb确保跳过代理和校验,漏掉direct将导致私有模块直接失败而非回源git clone。

Go 语言环境搭建卡在 go get 失败、私有模块拉不下来、国内访问慢——根本原因不是网络差,而是 GOPROXY、GOPRIVATE 和 GONOSUMDB 这三个环境变量没配对或配错。
go get 总是超时或报“no matching versions”?
这是最典型的代理缺失症状。Go 1.13+ 默认只信任官方 proxy(@#@#@#@#@#@#@#@#@#@0),而它在国内无法直连,且不支持私有域名。
-
go get实际行为:先查GOPROXY,失败后才 fallback 到直接 git clone;若GOPROXY返回 404 或超时,就直接报错,不会自动尝试源码地址 - 正确配置(推荐组合):
export GOPROXY=https://goproxy.cn,direct export GOPRIVATE=gitlab.example.com,gitee.com/liuyijiang export GONOSUMDB=gitlab.example.com,gitee.com/liuyijiang
- 注意:
GOPRIVATE和GONOSUMDB必须完全一致,否则 go 命令会在校验 checksum 时拒绝私有模块 - 如果私库走 SSH(如
git@gitlab.example.com:group/repo.git),确保GOPRIVATE里填的是域名部分(gitlab.example.com),不是完整 URL
私有模块 go get gitee.com/liuyijiang/commoncode 报 “module declares its path as … but was required as …”?
这和代理无关,是模块路径声明不一致导致的硬性校验失败。
- 错误写法(
go.mod第一行):module github.com/someone/commoncode
但你实际用的是gitee.com/liuyijiang/commoncode - 正确做法:初始化时必须严格匹配仓库地址
go mod init gitee.com/liuyijiang/commoncode
- 后续所有 import 路径、
go get地址、CI/CD 中引用路径,都必须和go.mod里声明的 module 名完全一致(包括大小写、子路径)
go build 或 go run 突然报 “checksum mismatch”?
说明某个依赖模块的源码被篡改过,或者你本地缓存了旧版 checksum,而 proxy 返回了新版二进制(常见于私库发版后未更新 go.sum)。
- 直接修复命令(慎用,仅限可信私库):
go clean -modcache go mod download go mod verify
- 更安全的做法:删掉
go.sum中对应行,再运行go mod tidy重新生成 - 关键点:只要用了
GOPRIVATE,go 就不会去校验该域名下模块的 checksum;所以这个错误只会在你漏配GOPRIVATE,或配了但拼错时出现
真正容易被忽略的是:GOPROXY 的 direct 后缀不是可选项,而是 fallback 开关。
漏掉它,私有模块或未收录在 proxy 中的模块会直接失败,而不是退回到 git clone —— 这个细节让很多人反复重装 Go 或换镜像,其实只是少敲了两个字母。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!











