必须配置goproxy=https://goproxy.cn,direct,因go 1.13+默认启用模块代理,仅设镜像不加direct会导致404时无法fallback直连github等源仓库,而direct是必需的失败降级机制。

Go 模块依赖下载失败,八成是 GOPROXY 默认值没改——直接换国内镜像源,几行命令就能切过去,不用动代码、不装代理。
怎么快速设置 GOPROXY 为国内镜像
Go 1.13+ 默认启用模块代理(GOPROXY),但默认值 https://proxy.golang.org 在国内基本不可用。最稳妥的做法是设为支持 Go module 的国内镜像,比如清华源或七牛云源:
- 执行
go env -w GOPROXY=https://goproxy.cn,direct(推荐,七牛云维护,稳定且支持私有模块回源) - 或者
go env -w GOPROXY=https://mirrors.tuna.tsinghua.edu.cn/goproxy/,direct -
direct是关键后缀,表示对私有域名(如公司内网git.company.com)跳过代理、直连
为什么不能只写一个 URL,非要加 ,direct
Go 的 GOPROXY 值是逗号分隔的列表,遇到第一个返回 200/404 的代理就停止;如果只设 https://goproxy.cn,当你要拉取公司内部模块(比如 git.internal/project)时,goproxy.cn 肯定 404,但 Go 不会自动 fallback 到 direct,而是报错 module git.internal/project: reading https://goproxy.cn/git.internal/project/@v/list: 404 Not Found。
- 加
,direct后,Go 会在代理返回 404 时自动尝试本地解析 + git clone - 不加的话,私有模块必须额外配置
GONOPROXY,反而更麻烦 - 注意:不要写成
GOPROXY=https://goproxy.cn;direct(分号错),必须是英文逗号
临时覆盖 vs 全局设置,该选哪个
日常开发建议全局设置,避免每个项目重复操作;CI/CD 或调试时可用临时方式:
- 全局生效(推荐):
go env -w GOPROXY=https://goproxy.cn,direct,写入~/.goenv,永久有效 - 仅当前终端生效:
export GOPROXY="https://goproxy.cn,direct",关闭终端即失效 - 仅单次命令生效:
GOPROXY=https://goproxy.cn,direct go mod download - 如果误设导致异常,用
go env -u GOPROXY可取消设置
验证是否生效、常见卡顿点
改完别急着 go mod tidy,先确认环境变量已落地:
- 运行
go env GOPROXY,输出应为https://goproxy.cn,direct(不是空、不是默认值) - 执行
go mod download -x(加-x看详细日志),观察请求是否发往goproxy.cn域名 - 如果仍卡在
get ...: verifying ...,可能是校验和数据库(GOSUMDB)被墙,顺手加上:go env -w GOSUMDB=off(仅开发环境;生产建议用sum.golang.org配代理) - Windows 用户注意:PowerShell 中
go env -w有时不生效,可改用 CMD 执行,或手动编辑%USERPROFILE%\go\env
真正要留意的是 ,direct 这个后缀和 GOSUMDB 的配合——漏掉任一个,都可能让 go mod download 看似成功实则漏包,或者私有模块反复报 404。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!











