Go代理配置不生效的常见原因包括:GO111MODULE未设为on、GOPROXY被忽略或覆盖、vendor目录存在导致跳过代理、IDE环境变量未同步。

Go代理配置不生效的常见原因
Go模块下载慢,绝大多数情况不是网络本身问题,而是 GO111MODULE 未启用或 GOPROXY 设置被忽略、覆盖。Go 1.13+ 默认启用模块模式,但若项目根目录下存在 vendor 目录且 GOMODCACHE 未显式设置,go build 可能跳过代理直连;另外,某些 IDE(如 VS Code 的 Go 扩展)会读取自己的环境变量副本,导致终端里设好的 GOPROXY 在编辑器内无效。
- 检查是否真正启用了模块:运行
go env GO111MODULE,输出必须是on(不是auto) - 确认代理设置已全局生效:执行
go env GOPROXY,应返回类似https://goproxy.cn,direct的值 - IDE 中需单独配置环境变量,不能只依赖 shell 启动时的设置
- 若使用
go install安装命令行工具(如golangci-lint),它也会走GOPROXY,但部分旧版本 Go(direct 回退逻辑有 bug,建议补上https://proxy.golang.org,direct作兜底
国内可用的稳定 Go 代理列表及选择建议
不是所有标榜“国内镜像”的代理都持续可用。目前(2024 年中)仍稳定、延迟低、同步及时的主流选项只有三个,按推荐顺序排列:
-
https://goproxy.cn:由七牛云维护,节点分布广,对私有模块支持较好(配合GOPRIVATE使用) -
https://goproxy.io:历史较久,但近年更新频率下降,偶发同步延迟,适合临时备用 -
https://mirrors.aliyun.com/goproxy/:阿里云镜像,需注意路径末尾必须带斜杠,否则 404;不支持go install的某些新语法(如@latest)
不建议用 https://proxy.golang.org 单独配置——它在大陆多数地区无法直连,且不提供 fallback 机制。
一键配置命令与验证方式
直接运行以下命令即可完成基础代理设置(Windows PowerShell 用户请改用 $env:GOPROXY="https://goproxy.cn,direct"):
go env -w GOPROXY=https://goproxy.cn,direct go env -w GOSUMDB=off
GOSUMDB=off 并非必须,但可避免因 checksum server 不可达导致的 verifying ...: checksum mismatch 报错;更稳妥的做法是保留校验但换源:go env -w GOSUMDB=sum.golang.org+replace=gosum.io+ca=trusted(仅限可信环境)。
验证是否生效:
- 新建空目录,执行
go mod init example.com/test - 再执行
go get github.com/spf13/cobra@v1.8.0 - 观察终端输出中的
Fetching行,URL 应含goproxy.cn字样,而非原始 GitHub 地址
私有模块和公司内网场景下的额外配置
如果项目依赖了 GitHub 私库、GitLab 或自建 Nexus/Artifactory,仅设 GOPROXY 不够,必须配合 GOPRIVATE 告诉 Go “这些域名不走代理”。否则 go 命令会尝试通过代理拉取私有地址,必然失败。
- 多个域名用逗号分隔,支持通配符:
go env -w GOPRIVATE=git.company.com,github.com/myorg/* - 若使用 SSH 克隆(如
git@github.com:myorg/repo),还需确保~/.ssh/config中对应 host 已配置,并且go能调用ssh(某些容器环境需额外安装 openssh-client) - 企业级场景建议统一用
go env -w GOPROXY=https://goproxy.cn,https://proxy.golang.org,direct,把公有模块交由双源保障,私有模块靠GOPRIVATE隔离
最常被忽略的是:设置了 GOPRIVATE 却忘了加 go env -w GONOSUMDB=...,导致私有模块仍卡在校验环节。只要不信任外部 checksum 数据,就该同步关闭校验或指定内部 sumdb。










