go env goproxy 返回空或 proxy.golang.org,说明配置未真正生效;需用 go env goproxy 验证输出是否为预期值(如 https://goproxy.cn,direct),并同步检查 gosumdb、goprivate 是否冲突或缺失。

go env GOPROXY 返回空或 proxy.golang.org?先确认配置是否真正写入
很多问题其实卡在“以为设了,其实没生效”。go env -w GOPROXY=... 看似执行成功,但可能被 shell 配置覆盖、IDE 未继承、或写入了错误的环境作用域(比如只写了当前会话)。最直接的验证方式是运行:go env GOPROXY,输出必须是你期望的值,例如 https://goproxy.cn,direct。如果返回空、https://proxy.golang.org,direct 或 direct,说明配置未落地。
- Windows PowerShell 用户注意:用
$env:GOPROXY="https://goproxy.cn,direct"是临时设置,关掉窗口就失效;必须用go env -w GOPROXY=...才持久 - macOS/Linux 用户检查 shell 配置文件(
~/.zshrc或~/.bash_profile)里有没有重复的export GOPROXY=...,它会覆盖go env -w的设置 - VS Code 用户:终端里
go env GOPROXY正确 ≠ 编辑器内生效。需在 VS Code 设置中显式添加"go.toolsEnvVars": {"GOPROXY": "https://goproxy.cn,direct"}
GOPROXY 设对了但 still timeout?检查 GOSUMDB 是否阻塞校验
即使 GOPROXY 指向国内镜像,Go 仍会默认去 sum.golang.org 校验模块哈希——这个地址在国内基本不可达,导致 go mod download 卡在 “verifying” 阶段,最终超时或报 checksum mismatch。这不是代理问题,而是校验链断裂。
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
- 临时验证:运行
go env -w GOSUMDB=off,再试go mod download。如果立刻成功,说明就是校验阻塞 - 生产环境不建议长期关校验,可换更稳妥的替代源:
go env -w GOSUMDB=sum.golang.org+replace=gosum.io+ca=trusted(仅限可信网络) - 若项目含私有模块,
GONOSUMDB必须与GONOPROXY值一致,否则校验失败仍会中断拉取
go get 还是 403 或 module not found?排查私有域名是否被代理误触
当 GOPROXY 包含 direct 作为兜底项,不代表私有仓库就自动绕过代理。Go 对私有路径的判断依赖 GOPRIVATE 或 GONOPROXY 显式声明。没配的话,git.internal.company.com/my/lib 会被当成公开模块发往 goproxy.cn,结果自然是 403 或 404。
- 确认私有域名是否已加入:
go env GOPRIVATE或go env GONOPROXY,二者选其一即可(推荐GOPRIVATE,语义更清晰) - 值必须是精确域名或带通配符的前缀,例如
git.corp.example.com,github.com/my-team/*,不能有空格、不能用http://前缀 - 改完后必须重新触发依赖操作:
go clean -modcache清掉旧缓存,再跑go mod download
go mod tidy 卡住不动?别只盯着 GOPROXY,先看日志和网络连通性
go mod tidy 卡住,常被归咎于代理,但真实原因可能是间接依赖里混入了未声明的私有路径、拼写错误的模块名,或代理本身返回了非标准响应(比如阿里云镜像漏掉 / 导致 404)。
- 加
-v参数看真实行为:go mod tidy -v,观察最后卡在哪一行、请求的是哪个 URL、返回状态码是多少 - 手动测试代理是否真通:
curl -I https://goproxy.cn/github.com/gorilla/mux/@v/v1.8.0.info,应返回 200 或 302;若超时或 404,说明代理地址写错(如阿里云必须带末尾/) - 遇到
unknown revision,大概率是模块名拼错,或该 tag 在 Git 仓库里根本不存在,跟代理无关
GOPROXY、GOSUMDB、GOPRIVATE 三者的值,并确认它们在你当前执行命令的实际环境中都可见。










