go mod download卡在proxy.golang.org是因国内直连不稳定导致超时或connection refused;应设goproxy=https://goproxy.cn,direct并同步配置gosumdb=off(测试)或可信校验源(生产),否则仅设goproxy仍会因sum.golang.org校验失败而中断构建。

go mod download卡在proxy.golang.org不动
这不是 Go 安装失败,而是模块下载阶段网络不通。Go 1.13+ 默认用 https://proxy.golang.org,国内直连基本都会超时或报 connection refused。
先验证是不是代理问题:运行 go env -w GOPROXY=direct,再执行 go mod download。如果仍失败,说明连 GitHub 等源站也访问不了;如果成功了,就确认是代理配置没生效。
-
GOPROXY必须以https://开头,http://会被忽略 - 多个代理用英文逗号分隔,例如
https://goproxy.cn,direct,direct放末尾才起兜底作用 - 别只设
GOPROXY就完事——GOSUMDB还在偷偷连sum.golang.org,照样卡住
GOPROXY 设置了但 go build 仍校验失败
现象是 verifying github.com/xxx@v1.2.3: checksum mismatch,本质不是代码被篡改,而是本地缓存、镜像同步延迟或 replace 规则残留导致校验和对不上。
最常用解法是清缓存:go clean -modcache,再重试 go mod download。这能解决约 70% 的误报。
- 检查
go.mod里是否有replace指向本地路径但没删// indirect标记——这种残留会让 Go 误算校验和 - 临时绕过单个模块校验可用
go get -insecure github.com/xxx/yyy,但别设全局GOINSECURE,否则所有私有域名都跳过校验,风险不可控 - CI 构建机必须同时设
GOPROXY=direct和GOSUMDB=off,只设前者没用,vendor目录存在也不影响远程校验
私有模块 403 或 module not found
项目引用公司内网 Git(如 git.internal.company.com/my/lib)时,Go 默认仍走代理,结果返回 403 或找不到模块。
必须配对设置 GOPRIVATE 和 GONOSUMDB,且值完全一致:
-
go env -w GOPRIVATE="git.internal.company.com,github.com/my-org/*"(支持通配符) go env -w GONOSUMDB="git.internal.company.com,github.com/my-org/*"-
GONOPROXY不是必须项——只要GOPROXY末尾带direct,私有模块会自动回退直连
注意:通配符只支持 *,不支持正则;多个域名用英文逗号分隔,不能有空格。
IDE 里代理配置不生效
终端里 go env GOPROXY 输出正确,但 VS Code 或 Goland 里 go mod tidy 仍卡住,大概率是 IDE 没继承 shell 环境变量。
VS Code 需在设置里显式配置环境变量,Goland 则要在 Terminal 和 Build 配置中分别设置,不能只依赖 shell 启动时的 export。
- 运行
go env | grep -E 'GOPROXY|GOSUMDB|GOPRIVATE',对比终端和 IDE 内嵌终端输出是否一致 - 某些 CI 流水线(如 GitHub Actions)默认不加载用户 shell 配置,需在 workflow 中显式写
go env -w命令 -
GO111MODULE必须为on,不是auto;可用go env GO111MODULE确认
最隐蔽的坑是:GOPROXY 和 GOSUMDB 必须可互通。比如你搭了内网 athens,但没配 GOSUMDB=https://athens.internal/sum,代理能拉代码,校验服务却连不上,构建照样失败。











