应设goproxy=https://goproxy.cn,direct并验证生效,同时配goprivate处理私有模块、gosumdb校验策略,否则会因代理未生效、私有路径未排除或校验失败而退回默认proxy.golang.org导致超时。

go mod download 卡在 proxy.golang.org 怎么办
不是你网络差,是 Go 默认代理 proxy.golang.org 在国内基本不可用——DNS 污染、TLS 握手超时、连接复用失败频繁触发重试退避,现象就是卡几秒后报 dial tcp: i/o timeout。
直接换源就能解决,但必须配对生效:
-
go env -w GOPROXY=https://goproxy.cn,direct(注意逗号后不能有空格) - 别只执行这句就完事:终端里再运行
go env GOPROXY,确认输出确实是该值 - IDE(如 VS Code)不继承 shell 环境变量,需在设置里单独填入
GOPROXY环境变量 - 验证是否真走代理:运行
go mod download -x github.com/gin-gonic/gin@v1.9.1,日志里出现GET https://goproxy.cn/才算成功
GOPROXY=direct 为什么反而更慢
设成 GOPROXY=direct 相当于关掉所有代理,Go 回退到原始模式:逐个 git clone 或直连 GitHub/GitLab,国内拉取速度比走镜像还慢,且容易因 DNS 或 TLS 失败中断。
真正需要的是带 fallback 的组合:
-
https://goproxy.cn,direct表示:先走七牛代理;失败或匹配GOPRIVATE时,才直连 - 如果项目含私有模块(如
git.internal.company.com/lib),漏掉,direct就会 404 - 不要用
https://proxy.golang.org,direct作兜底——它在国内同样不可靠,纯属浪费一次重试
checksum mismatch 是网速问题吗
不是。这是模块哈希校验失败,根源通常是缓存污染或代理未透传官方校验记录。
Go 配置库,使用 spf13/viper — 分层优先级(flag > env >file > KV > default),提供 BindPFlag/BindPFlags、SetEnvPrefix + SetEnvKeyReplace 等功能。
优先排查这几处:
- 执行
go clean -modcache清空本地缓存,再重试 - 确认你用的代理支持 checksum 校验:
goproxy.cn和mirrors.aliyun.com/goproxy/都透传sum.golang.org,但某些自建 proxy 若没配GOINSECURE或跳过校验,就会返回错误哈希 - 临时调试可加
GOSUMDB=off,但上线前必须关掉——否则失去依赖完整性保护 - 刚发布的版本(比如
v1.2.3)在goproxy.cn返回 404,等 1–2 分钟或临时切https://goproxy.io(注意该站已停服,仅作应急)
私有模块拉不到,GOPRIVATE 怎么设才对
GOPRIVATE 不是可选项,是必配项。否则 Go 仍会把私有路径发给公共代理,结果不是 403 就是 not found。
配置要点很具体:
- 运行
go env -w GOPRIVATE=git.example.com/internal/*,github.com/my-org/private(逗号分隔,无空格) - 通配符只支持
/*后缀,不支持*或** - 如果用了
,direct,GOPRIVATE可省略,但校验阶段仍需GONOSUMDB配合,否则go get会拒绝拉取 - 公司内网 Git 服务若需 Basic Auth 或 SSH key,
goproxy.cn无法代为鉴权,必须靠,directfallback 到本地 git 客户端处理
真正卡住的地方,往往不是“要不要换源”,而是 GOPROXY 是否被所有子进程正确读取、,direct 是否启用、GOPRIVATE 是否覆盖全部私有路径——这三个点漏掉任何一个,都可能让下载行为退回到默认代理,白配。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!










