根本原因是默认代理proxy.golang.org对国内节点未优化,应设goproxy=https://goproxy.cn,direct并验证生效,同时配gosumdb避免校验失败,清缓存可解决checksum mismatch。

go mod download 卡在 proxy.golang.org 怎么办
根本不是你网络差,而是 Go 默认代理 proxy.golang.org 对国内节点没做优化,DNS 污染、TLS 握手超时、连接复用失败都会触发重试+退避,看起来像“卡住”。真实现象常是:命令停在某个模块几秒不动,然后报 Get "https://proxy.golang.org/": dial tcp: i/o timeout。
必须设 GOPROXY 环境变量(不是只改 go env -w),推荐值:https://goproxy.cn,direct。,direct 是关键——它让私有模块(如 git.internal.company.com/my/lib)自动 fallback 到直连,不走代理。
别信“改完 go env -w GOPROXY=... 就完事”,Shell 启动新进程若没继承环境变量,go 命令仍读空值。验证是否生效,跑:go mod download -x github.com/gin-gonic/gin@v1.9.1,看日志里是不是出现 GET https://goproxy.cn/...;如果还是 proxy.golang.org 或直接 git clone,说明没生效。
为什么设了 GOPROXY 还 404 或 checksum mismatch
goproxy.cn 是镜像服务,不是加速器,速度取决于你机器到七牛节点的网络质量,并非所有地区都快。刚发布的模块(比如 v1.2.3 发布后 1–2 分钟内)可能因 CDN 缓存未刷新而返回 404 Not Found,等几分钟或临时切 https://goproxy.io(注意:该站已停服,实际应换 https://mirrors.aliyun.com/goproxy/)。
checksum mismatch 不是网速问题,是校验失败:模块内容和 sum.golang.org 记录的哈希不一致。常见于镜像同步延迟、中间代理篡改或本地缓存污染。
- 先清缓存:
go clean -modcache - 确认镜像源是否透传官方校验 ——
goproxy.cn和mirrors.aliyun.com/goproxy都支持,但某些自建 proxy 若跳过校验就会出问题 - 临时绕过(仅调试):
GOSUMDB=off,但上线前必须关掉
私有模块拉不到或认证失败怎么处理
goproxy.cn 不支持私有模块鉴权。如果你的 go.mod 里写了 replace example.com/internal => git@git.example.com/internal v0.0.0-20230101000000-abc123,而 Git 服务器需要 SSH key 或 HTTP Basic Auth,代理无法帮你登录。
使用 uber-go/dig 在 Golang 中实现依赖注入——基于反射容器,提供 Provide/Invoke、dig.In/dig.Out 参数与结果对象,支持命名依赖等
正确做法是靠 ,direct fallback,但需配合 GONOPROXY 和 GONOSUMDB 显式排除:
go env -w GONOPROXY="git.internal.company.com,github.com/my-org"go env -w GONOSUMDB="git.internal.company.com,github.com/my-org"
二者值必须完全一致,否则 go get 会拒绝拉取。通配符不支持,只能逗号分隔精确域名或路径前缀。若用了 direct 作为兜底项,GONOPROXY 不是必须,但 GONOSUMDB 仍要设,否则校验失败。
构建时反复卡在 go list 或 sum 校验怎么办
go build 慢,90% 不是编译器慢,而是卡在非编译环节:go list 扫描整个模块树(尤其含 replace 或本地路径时)、每次去校验 sum.golang.org(国内直连常 TLS 超时)、go:generate 无差别触发。
实操建议:
- 确保
GOPROXY和GOSUMDB都设对,避免每次构建都尝试直连官方校验源 - 禁用过时参数:
-a和-i在 Go 1.12+ 已废弃,强制全量重编,绕过缓存 -
go:generate改成按需触发:用make或just控制,比如只在.proto变更时跑protoc - CI 中并行构建多个 binary:
go build ./cmd/a ./cmd/b,共享同一轮依赖解析
最易被忽略的是:GOSUMDB 设错会导致每次构建都静默回退到直连校验,哪怕 GOPROXY 正确也没用。务必一起检查。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!










