根本原因是goproxy未生效或配置不完整,需设为https://goproxy.cn,direct并确保shell子进程继承该变量,同时配goprivate处理私有模块,否则go mod download会fallback至不可达的proxy.golang.org。

go mod download 为什么卡在 GET https://proxy.golang.org/?
根本不是网络慢,而是 GOPROXY 没生效或配置不完整。Go 默认用 https://proxy.golang.org,direct,但国内直连 proxy.golang.org 极易超时或 DNS 污染,触发重试退避,看起来像“卡住”。
- 必须显式设置
GOPROXY环境变量(不只是go env -w GOPROXY=...),确保 Shell 新进程能继承——比如在~/.bashrc或~/.zshrc中写export GOPROXY="https://goproxy.cn,direct"并source生效 -
,direct不可省略:它让私有模块(如git.company.com/internal)自动 fallback 到直连,否则会报no matching versions或认证失败 - 验证是否真生效:运行
go mod download -x github.com/gin-gonic/gin@v1.9.1,看日志里出现的是GET https://goproxy.cn/...还是GET https://proxy.golang.org/...
go.sum 校验失败:sum.golang.org 访问不了怎么办?
go.sum 是依赖完整性锁,但默认校验服务 sum.golang.org 在国内同样不稳定,会导致 go build 或 go mod tidy 报 verifying github.com/xxx@v1.2.3: checksum mismatch。
- 临时关闭校验(仅开发环境):
export GOSUMDB=off,但上线前必须恢复 - 换国内可信镜像:
export GOSUMDB=sum.golang.google.cn(Google 官方中国镜像,比第三方更可靠) - 私有模块场景下,
GOPRIVATE必须配全前缀,例如export GOPRIVATE="git.company.com/*,github.com/my-org/*",否则仍会尝试去sum.golang.org查校验和
go mod tidy 不下载新依赖?缓存和 go.mod 不一致的典型表现
常见现象是改了 import 或加了新库,执行 go mod tidy 却静默退出、没下载、也没报错——本质是模块缓存与当前 go.mod 声明脱节。
- 先确认缓存路径:
go env GOMODCACHE,通常为$GOPATH/pkg/mod - 检查
go.mod里的module路径是否和实际 import 路径一致(比如项目重命名后忘了改module example.com/newname) - 强制刷新缓存:
go clean -modcache,再跑go mod tidy;注意这会清掉所有模块缓存,首次重建较慢 - 如果用了
replace,确保go.mod中的replace行未被注释,且目标路径存在且可读
私有 Git 仓库依赖拉不下来:SSH vs HTTPS 认证陷阱
当 go.mod 里写 replace example.com/internal => git@git.example.com/internal v0.0.0-20230101000000-abc123,却报 ssh: connect to host git.example.com port 22: Connection refused 或 fatal: could not read Username for 'https://git.example.com',问题出在协议与凭证机制不匹配。
- SSH 地址(
git@git...)要求本地已配置 SSH key 且ssh-agent正在运行;go命令不会读取~/.gitconfig的 credential helper - HTTPS 地址(
https://git.example.com/...)需靠git config --global credential.helper store或环境变量GIT_USERNAME/GIT_PASSWORD(Go 1.21+ 支持) - 最稳方案:统一用 HTTPS +
GOPRIVATE+ 凭证配置,并确保GOPROXY含,direct,避免代理强行解析私有域名
GOPRIVATE、或者 go.sum 校验链断在了你没意识到的环节。调试时别只盯输出,要加 -x 看真实请求地址,再对照 go env 输出逐项核对。











