GOPROXY 默认值 https://www.php.cn/link/77050e6fc4141c7d1457f36e3fc6f821 在国内常失效,主因是 proxy.golang.org 受防火墙和 CDN 路由影响,导致超时、403 或极低速;direct 虽可回源,但校验仍依赖境外 sum.golang.org,引发整体失败。

为什么 GOPROXY 默认值在国内经常失效
Go 1.13+ 默认启用 GOPROXY=<a href="https://www.php.cn/link/77050e6fc4141c7d1457f36e3fc6f821">https://www.php.cn/link/77050e6fc4141c7d1457f36e3fc6f821</a>,但 proxy.golang.org 在国内直连不稳定,常出现超时、连接重置或返回 403。这不是你网络问题,而是该域名受 CDN 路由和防火墙策略影响,实际请求可能被拦截或调度到不可达节点。
-
direct作为 fallback 会退回到直接拉取原始仓库(如 GitHub),但模块路径中含sum.golang.org校验时仍需访问境外服务,导致整体失败 - 即使能连上
proxy.golang.org,下载速度也普遍低于 100KB/s,尤其对含二进制或大 vendor 的模块(如golang.org/x/sys)尤为明显
推荐的国内镜像站及设置方式
目前稳定可用的主流镜像包括:
-
<a href="https://www.php.cn/link/56f828cd13fd369ee16c728e6c50fb57">https://www.php.cn/link/56f828cd13fd369ee16c728e6c50fb57</a>(七牛云维护,支持 HTTPS + 持久缓存) -
<a href="https://www.php.cn/link/5153c4d7d687dde02b4d10606593fabf">https://www.php.cn/link/5153c4d7d687dde02b4d10606593fabf</a>(阿里云,与 GOPROXY 协议兼容) -
<a href="https://www.php.cn/link/5e6ff78d8ffefe5f71bfa7d5574614d6">https://www.php.cn/link/5e6ff78d8ffefe5f71bfa7d5574614d6</a>(已停更,不建议新项目使用)
设置方法(任选其一):
- 临时生效(当前 shell):
export GOPROXY=<a href="https://www.php.cn/link/56f828cd13fd369ee16c728e6c50fb57,direct">https://www.php.cn/link/56f828cd13fd369ee16c728e6c50fb57,direct</a>
- 全局生效(写入 shell 配置):
echo "export GOPROXY=<a href="https://www.php.cn/link/56f828cd13fd369ee16c728e6c50fb57,direct">https://www.php.cn/link/56f828cd13fd369ee16c728e6c50fb57,direct</a>" >> ~/.zshrc && source ~/.zshrc
- 仅对当前项目生效(在项目根目录执行):
go env -w GOPROXY=<a href="https://www.php.cn/link/56f828cd13fd369ee16c728e6c50fb57,direct">https://www.php.cn/link/56f828cd13fd369ee16c728e6c50fb57,direct</a>
注意:direct 必须保留在列表末尾,否则私有模块(如公司内网 GitLab 地址)将无法解析
遇到 “checksum mismatch” 怎么办
启用镜像后偶尔报错:
verifying github.com/some/pkg@v1.2.3: checksum mismatch
这通常不是镜像问题,而是本地 go.sum 缓存与镜像源返回内容不一致,常见原因:
- 之前用过不同代理(如
proxy.golang.org)下载过同一版本,go.sum记录了旧校验和 - 模块作者撤回并重发同版本 tag(极少见,但存在)
- 本地
go.mod中指定了伪版本(v1.2.3-00010101000000-000000000000),而镜像只提供规范 release 版本
解决办法:
- 运行
go clean -modcache
清空模块缓存 - 删除项目下
go.sum,再执行go mod download
重新生成 - 若仍失败,可临时关闭校验:
go env -w GOSUMDB=off
(仅调试用,勿提交)
私有模块和 GOPRIVATE 配合要点
如果项目同时引用公司内部 GitLab 或 GitHub 私有仓库(如 git.example.com/internal/lib),必须配置 GOPRIVATE,否则 Go 会强行走代理导致 404 或认证失败:
- 设置方式:
go env -w GOPRIVATE=git.example.com/*
- 支持通配符,但不支持正则;多个域名用逗号分隔,如
git.example.com/<em>,github.com/my-org/</em> - 注意:一旦设置了
GOPRIVATE,对应域名下的所有模块都不会经过GOPROXY,而是直连——所以确保这些地址可被机器访问且无需额外代理 - 如果私有仓库需要 token 认证,还需配置
git config或~/.netrc,Go 本身不处理 HTTP Basic Auth
镜像加速本质是替换模块分发链路,但它不改变 Go 的模块发现逻辑和校验机制。最容易被忽略的是 GOPRIVATE 和 go.sum 的耦合行为:一个配错,另一个就反复报错。

















