必须显式设置GOPROXY环境变量为https://goproxy.cn,direct并写入shell配置文件,否则新进程仍fallback至proxy.golang.org;同时需确保GO111MODULE=on、清空vendor目录或加-mod=mod、正确配置GOPRIVATE以支持私有模块。

go mod download 卡在 proxy.golang.org 怎么办
这不是你本地网络差,而是 proxy.golang.org 对国内节点没做优化,DNS 污染、TLS 握手超时、连接重置都极常见。Go 工具链默认会卡住几秒再退避重试,看起来像“冻结”。
必须显式设置 GOPROXY 环境变量,不能只靠 go env -w 写配置——新起的 shell 或 IDE 进程若没继承该变量,仍会 fallback 到官方地址。
- Linux/macOS:运行
export GOPROXY=https://goproxy.cn,direct,并写入~/.bashrc或~/.zshrc - Windows PowerShell:运行
$env:GOPROXY="https://goproxy.cn,direct",并加入 PowerShell 配置文件 - 验证是否生效:执行
go mod download -x github.com/gin-gonic/gin@v1.9.1,看日志里出现的是GET https://goproxy.cn/...还是GET https://proxy.golang.org/...
GOPROXY 设置后仍报 checksum mismatch
这不是网速问题,是模块内容和校验和不一致。常见于镜像源同步延迟、中间代理篡改或本地缓存污染。
goproxy.cn 和 mirrors.aliyun.com/goproxy/ 都透传官方 sum.golang.org 的校验数据,但如果你用的是自建 proxy 且没配 GOINSECURE 或跳过校验,就容易出错。
- 先清本地缓存:
go clean -modcache - 确认私有模块路径已加入
GOPRIVATE,例如export GOPRIVATE=git.example.com/internal/*,否则 Go 仍会尝试走公共 proxy 去查校验和 - 调试阶段可临时关校验:
export GOSUMDB=off,但上线前必须恢复,否则失去依赖完整性保护
公司内网如何安全用代理又不暴露私有仓库
单一 GOPROXY 地址无法兼顾公有加速与私有直连,硬设 direct 又丢掉所有代理优势。关键在于分层 fallback + 显式路由。
推荐组合:GOPROXY=https://nexus.example.com/repository/goproxy/,https://goproxy.cn,direct —— 公司 Nexus 在前,国内镜像兜底,direct 收尾保私有模块。
- 私有仓库地址(如
git.company.com/foo/bar)必须匹配GOPRIVATE中的通配规则,否则 Go 仍会发请求到代理去查 info 文件 - 确保 Nexus 或 Artifactory 的 Go 代理服务启用了标准
/mod/和/zip/接口,否则 Go 工具链无法识别 - 不要用
https://goproxy.io—— 它已于 2025 年底停服,实际请求会返回 502
为什么 go build 或 go install 还是慢或失败
除了 GOPROXY,还有三个常被忽略的干扰项:
-
GO111MODULE必须为on,不是auto;运行go env GO111MODULE确认输出是on - 项目根目录存在
vendor/目录时,go build默认跳过模块代理,直接读本地 vendor —— 清掉它或加-mod=mod强制走模块逻辑 - IDE(如 VS Code)可能使用独立环境变量副本,终端里设好的
GOPROXY在编辑器内不生效,需在 IDE 设置中单独配置
最易被忽略的是:GOPROXY 值末尾的 ,direct 不是可选修饰,而是 fallback 行为的开关。漏掉它,私有模块就会因 404 或 401 卡死,且错误信息不提示原因。

















