必须改代理并验证全链路配置:先确认go≥1.11、go111module=on、存在go.mod;再用go env -w goproxy=https://goproxy.cn,direct设置代理;私有模块需配goprivate;gosumdb建议设为off或换源;最后清缓存go clean -modcache。

国内直接用默认 GOPROXY 肯定失败,go get 卡住、超时、报 proxy.golang.org: no such host 是常态——必须改代理,且不能只改一次就完事。
确认 Go 版本和模块模式是否启用
Go 1.11+ 才支持 go mod,但默认不强制开启。如果你还在用 GOPATH 模式拉包,或项目里没 go.mod,GOPROXY 实际不会生效。
- 运行
go version,确保 ≥ 1.11(2026 年建议用 1.25.x 稳定版) - 检查当前目录是否有
go.mod;没有就先执行go mod init example.com/mymodule - 确认
GO111MODULE值:运行go env GO111MODULE,输出应为on或auto(auto在含go.mod的目录下才生效) - 若输出
off,执行go env -w GO111MODULE=on
设置 GOPROXY 必须用 go env -w,不是 export
Linux/macOS 下用 export GOPROXY=... 只对当前 shell 有效,Goland、VS Code 终端、CI 脚本可能读不到;Windows 的系统环境变量又容易和用户变量冲突。唯一可靠方式是用 go env -w 写入 Go 自己的配置文件。
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
- 推荐命令:
go env -w GOPROXY=https://goproxy.cn,direct - 多个镜像可并列:
go env -w GOPROXY=https://goproxy.cn,https://goproxy.io,direct -
direct表示兜底直连,但国内基本走不通,所以它只是 fallback,不是备用主源 - 改完后务必运行
go env GOPROXY验证输出,别只信命令没报错
内网或私有模块场景必须配 GOPRIVATE
如果项目依赖公司内网 Git(如 git.internal.company.com/mylib),即使设置了 GOPROXY,Go 默认仍会尝试去公共代理查这个域名——结果 404 或认证失败。这时必须告诉 Go:“这个域名不走代理”。
- 运行
go env -w GOPRIVATE=git.internal.company.com - 支持通配符:
go env -w GOPRIVATE=*.company.com - 多个域名用逗号分隔:
go env -w GOPRIVATE=git.internal.company.com,github.company.com - 注意:一旦设了
GOPRIVATE,对应域名的 checksum 验证(GOSUMDB)也会自动跳过,这是设计行为,不是 bug
缓存和验证机制要同步调整
GOPROXY 改了,但 GOSUMDB 还指着国外服务器,go get 仍可能卡在 checksum 校验环节,报错类似 verifying github.com/xxx@v1.2.3: checksum mismatch。
- 国内镜像通常配套提供
sum.golang.google.cn的代理,但该地址也常不稳定;更稳妥的是关掉远程校验:go env -w GOSUMDB=off - 或者换为可信镜像:
go env -w GOSUMDB=sum.golang.google.cn(需配合 HTTP 代理或 DNS 解析正常) - 改完
GOPROXY或GOSUMDB后,建议清缓存:go clean -modcache,否则旧包可能复用错误 checksum - 注意:
go clean -modcache会删掉所有已下载模块,下次go build会重新拉,不是“轻量刷新”
真正麻烦的从来不是改一行 go env -w,而是改完之后没人检查 GO111MODULE 是否真生效、GOPRIVATE 是否漏配、GOSUMDB 是否还在试图连墙外服务器——这些组合问题一碰就卡,而且报错信息从不直说根源在哪。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!










