go mod download卡在proxy.golang.org是因国内直连超时或connection refused;应设GOPROXY=https://goproxy.cn,https://mirrors.tuna.tsinghua.edu.cn/goproxy/,direct并同步配置GOSUMDB=off(测试)或可信sumdb(生产),否则校验失败仍会中断构建。

go mod download卡在proxy.golang.org或报connection refused
这不是 Go 安装失败,而是模块下载阶段网络不通。Go 1.13+ 默认用 https://proxy.golang.org,国内直连基本都超时或返回 connection refused,现象是命令无响应、几秒后直接 hang 住。
临时验证是否代理问题:执行 go env -w GOPROXY=direct,再跑 go mod download——若仍失败,说明连 GitHub 等源码仓库也访问不了,direct 模式无效;若成功,则确认是代理链路问题。
- 别长期用
direct:它绕过代理但不解决校验问题,GOSUMDB仍会尝试连sum.golang.org,导致后续go build失败 - 生产环境必须配对设置:
go env -w GOPROXY=https://goproxy.cn,https://mirrors.tuna.tsinghua.edu.cn/goproxy/,direct+go env -w GOSUMDB=off(测试)或go env -w GOSUMDB=sum.golang.org(生产配可信代理) - CI 构建机必须设
GOPROXY=direct GOSUMDB=off再运行go build;只设GOPROXY不够,vendor 目录存在时仍会触发远程校验
GOPROXY 设置后仍报 404 Not Found 或 module not found
Go 不会在 HTTP 404 时自动 fallback 到下一个代理地址,只对网络层错误(如 dial tcp: i/o timeout)才轮询。单个镜像失效常见于 CDN 缓存未刷新、上游删 tag、证书过期等不可控点。
正确写法必须是逗号分隔的有序列表,且 direct 必须放在末尾:
立即学习“go语言免费学习笔记(深入)”;
- 优先级从左到右:第一个能响应就停止,不继续试后面
- 推荐组合:
https://goproxy.cn,https://mirrors.tuna.tsinghua.edu.cn/goproxy/,direct - 不要混入
https://proxy.golang.org:它在国内几乎必然超时,反而拖慢整个链路 - 内网环境要移除
direct:防火墙通常禁止出向 HTTPS 直连,此时必须确保所有依赖都能被内部代理命中
checksum mismatch 报错怎么快速定位
现象是 verifying github.com/xxx@v1.2.3: checksum mismatch,本质不是代码被篡改,而是本地缓存、镜像同步延迟或 replace 规则冲突导致的校验失败。
- 先清缓存:
go clean -modcache,能解决约 70% 的误报 - 检查
go.mod是否残留replace指向本地路径但没删// indirect标记——这种残留会让 Go 误算校验和 - 临时绕过单个模块校验:
go get -insecure github.com/xxx/yyy;但别设全局GOINSECURE,否则私有域名全跳过校验,风险不可控 - 若用了私有模块(如
git.internal.company.com/mylib),必须同步配置GONOSUMDB=git.internal.company.com,否则校验服务无法访问会中断构建
私有模块拉取失败:403 / 410 Gone / unknown revision
根本原因是 Go 默认仍把私有域名走代理,而代理查不到、或返回权限错误。必须显式排除,不能靠 direct 兜底。
- 用
GOPRIVATE告诉 Go 跳过代理直连:go env -w GOPRIVATE="git.internal.company.com,github.com/my-org/*" -
GONOPROXY和GONOSUMDB必须值一致,且只支持精确域名或路径前缀,不支持通配符(github.com/my-org/*是合法的,但*.company.com不行) - 调试时加
-v参数:go mod download -v可看到每个模块实际请求的 URL 和状态码,快速识别是 403 还是 410 - 遇到
unknown revision,先确认该 commit 或 tag 是否真实存在、权限是否开放,再检查GOPRIVATE是否覆盖完整域名
最常被忽略的是 GOSUMDB 和 GONOSUMDB 的协同——哪怕代理能拉下代码,校验环节仍可能因域名未排除而失败。尤其在 CI 流程中,go mod vendor 成功不代表构建稳了,必须显式关掉校验或配对可信 sumdb 服务。


















