最有效解法是设 gosumdb=off 或改用可访问的 sumdb 替代源,并确保 goproxy 末尾含 direct(如 https://goproxy.cn,direct),否则弱网下 verifying 阶段会因无法访问 sum.golang.org 而长时间卡住。

go mod download 卡在 verifying 阶段怎么办
弱网环境下最常卡住的不是下载本身,而是 verifying 阶段——Go 会尝试连接 sum.golang.org 校验 checksum,而这个地址在国内多数情况不可达,导致反复重试、超时后才 fallback 到 direct。
真正有效的解法不是“等它自己重试”,而是提前切断校验阻塞:
-
GOSUMDB=off是最快方案,适合开发/测试环境(go env -w GOSUMDB=off) - 若需保留校验,改用可访问的替代源:
go env -w GOSUMDB=sum.golang.org+replace=gosum.io+ca=trusted(仅限可信内网) - 避免只设
GOPROXY=https://proxy.golang.org——它在弱网下根本连不上,且无 fallback,等于主动放弃代理
GOPROXY 设置必须带 direct 才能抗弱网
代理链里漏掉 direct,弱网下一旦代理响应慢或超时,整个 go mod download 就会失败,而不是降级继续。
正确写法必须是逗号分隔、direct 在末尾:
-
go env -w GOPROXY=https://goproxy.cn,direct(推荐,七牛节点延迟低) -
go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct(注意末尾斜杠,否则 404) - 不要用
https://proxy.golang.org,direct——前者国内基本不可达,Go 会先花 10 秒以上尝试,再 fallback,白白浪费时间
vendor 目录是弱网下的兜底手段
当代理也不可靠、或机器完全离线时,vendor 是唯一能绕过网络依赖的方式。但它不是“一键生成就完事”,有明确前提:
- 必须在有网、代理通畅的机器上先执行
go mod vendor(Go 1.14+ 支持) - 生成的
vendor目录要和go.mod、go.sum一起提交进 Git,否则其他机器拉不到完整依赖 -
go build默认不读vendor,需加-mod=vendor参数:go build -mod=vendor - 慎用
go mod vendor后手动删包——Go 不检查完整性,删错一个就会编译失败
IDE 和终端代理配置不同步是隐形坑
你在终端里 go env -w GOPROXY=... 成功了,但 VS Code 里 go mod tidy 还是卡住?大概率是 IDE 没读取到你写的全局配置。
VS Code 的 Go 扩展默认用自己的环境变量副本,解决方法只有两个:
- 在 VS Code 的设置里搜
go.toolsEnvVars,手动加一条:"GOPROXY": "https://goproxy.cn,direct" - 或者关掉 “Auto GOPATH” 类选项,强制它继承系统 shell 环境(部分版本需重启窗口)
- JetBrains GoLand 用户需在
Settings → Go → GOPATH下勾选 “Use GOPATH from environment”
弱网下任何一次配置不同步,都会让工具链退回直连模式,然后默默卡住——它不会报错,只会不动声色地耗尽你的耐心。











