答案是需设GOPROXY=https://goproxy.cn,direct并确保环境变量生效,同时配GOPRIVATE处理私有模块、go clean -modcache清缓存、GOSUMDB=off临时绕过校验(测试用)。

go mod download卡在proxy.golang.org怎么办
这不是你本地网络差,而是默认代理 proxy.golang.org 对国内节点没做优化,DNS 污染、TLS 握手超时、连接重置都会导致卡住几秒甚至直接报 dial tcp: i/o timeout。根本解法不是“多试几次”,而是让 Go 工具链彻底绕过它。
必须设置环境变量 GOPROXY,且值里要包含 direct:
-
export GOPROXY=https://goproxy.cn,direct(推荐,七牛云维护,缓存全量) -
export GOPROXY=https://mirrors.aliyun.com/goproxy/,direct(阿里云企业级,路径更规范) - 绝对不要用
https://goproxy.io——该服务已停服,实际请求会返回502 Bad Gateway
注意:go env -w GOPROXY=... 不够可靠,Shell 启动新子进程时可能不继承;建议写入 shell 配置文件(如 ~/.zshrc 或 ~/.bash_profile),然后 source 生效。
为什么设置了GOPROXY还报checksum mismatch
这不是网速问题,是校验失败:模块内容和官方 sum.golang.org 记录的哈希不一致。常见于镜像源同步延迟、中间代理篡改或本地缓存污染。
立即学习“go语言免费学习笔记(深入)”;
先清缓存再重试:
初始化并管理阿里云SDK Go 客户端,涵盖 sync.Once 单例、goroutine 安全、endpoint 与 region 配置、VPC 端点及调试。
- 运行
go clean -modcache彻底清空本地模块缓存 - 确认所用镜像是否透传校验 ——
goproxy.cn和mirrors.aliyun.com/goproxy都原样转发官方sum.golang.org数据,但某些自建 proxy 若配置了GOINSECURE或跳过校验,就会出问题 - 调试时可临时关校验:
export GOSUMDB=off,但上线前必须恢复为sum.golang.org,否则失去依赖完整性保护
私有模块(如git.example.com/internal)拉不到怎么办
只设 GOPROXY 不够,Go 仍会尝试把私有域名发给公共代理,结果 404 或认证失败。
必须配合 GOPRIVATE 显式声明私有路径:
-
export GOPRIVATE=git.example.com/internal/*(支持通配符) - 多个域名用逗号分隔:
export GOPRIVATE=git.example.com/internal/*,github.company.com/private/* - 如果公司用了 Nexus/JFrog 自建 Go 代理,把它放在
GOPROXY列表最前面:export GOPROXY=http://nexus.example.com/repository/goproxy/,https://goproxy.cn,direct
别信“加了 direct 就万事大吉”——没配 GOPRIVATE,Go 会先发请求到 goproxy.cn,发现 404 才 fallback,白白浪费一次 HTTP 请求。
如何验证代理真正在用,而不是悄悄 fallback
别只看 go env GOPROXY 输出,那只是配置项;得看 Go 实际发出的请求。
用 -x 参数触发调试日志:
- 执行
go mod download -x github.com/gin-gonic/gin@v1.9.1 - 观察输出里是否出现类似
GET https://goproxy.cn/github.com/gin-gonic/gin/@v/v1.9.1.info的行 - 如果看到
GET https://proxy.golang.org/...或直接git clone,说明GOPROXY没生效,检查环境变量是否被覆盖、是否漏了direct、GOPRIVATE是否匹配模块路径
最容易被忽略的是:私有模块路径必须和 GOPRIVATE 值完全匹配(包括协议前缀、大小写、通配位置),哪怕多一个斜杠或少一个星号,Go 都会走错路线。

















