必须用go env -w设置GOPROXY=https://goproxy.cn,direct,漏掉,direct会导致私有模块拉取失败;需配套配置GOSUMDB=sum.golang.google.cn和GOPRIVATE=私有域名。

直接改 go env -w 就行,别碰配置文件
Go 没有“全局配置文件”来管理模块代理——GOPROXY 是环境变量,不是写在某个 YAML/JSON/TOML 里的配置项。试图去修改 go.mod、go.sum 或项目根目录下的隐藏文件,完全无效。所有生效方式都基于环境变量,且必须通过 go env -w 或 shell 的 export/set 设置。
GOPROXY=https://goproxy.cn,direct 是唯一推荐写法
漏掉 ,direct 是国内用户最常踩的坑,会导致私有模块(如 git.internal.company/project)拉取失败,报 module not found,但错误提示里根本不会提是代理问题。
-
https://goproxy.cn响应快、同步及时,支持私有域名透传(配合GOPRIVATE) -
,direct表示:当代理返回 404(即镜像里没有该模块)时,自动 fallback 到原始仓库,而不是直接报错 - 不要写成
https://goproxy.cn;direct或https://goproxy.cn https://proxy.golang.org—— 分号和空格会让 Go 当成多个参数,整个值被截断 - 多镜像串联(如
https://goproxy.cn,https://mirrors.aliyun.com/goproxy/,direct)理论上可行,但实际增加首次失败延迟,无实质容灾价值
IDE 和 CI 环境里容易失效,得单独处理
VS Code、GoLand 这类 IDE 不会自动继承终端的 shell 环境变量。你在终端里执行了 go env -w GOPROXY=...,编辑器里 go mod tidy 仍可能卡住。
Go 配置库,使用 spf13/viper — 分层优先级(flag > env >file > KV > default),提供 BindPFlag/BindPFlags、SetEnvPrefix + SetEnvKeyReplace 等功能。
- VS Code:在设置里搜
go.toolsEnvVars,手动加一条"GOPROXY": "https://goproxy.cn,direct" - GoLand:Settings → Go → GOROOT → Environment,点
+添加GOPROXY变量 - GitHub Actions / GitLab CI:必须在 job step 里显式设置,例如:
env: GOPROXY: https://goproxy.cn,direct - 本地 Docker 构建(
Dockerfile中RUN go mod download):需在ENV GOPROXY=https://goproxy.cn,direct,不能只靠宿主机设置
GOSUMDB 和 GOPRIVATE 必须配套设,否则校验失败或私有模块被拦
只设 GOPROXY 不够。国内镜像源若没正确透传 checksum 服务,或私有模块路径没声明,就会触发 verifying ...: checksum mismatch 或静默跳过代理。
立即学习“go语言免费学习笔记(深入)”;
-
GOSUMDB=sum.golang.google.cn:比默认的sum.golang.org在国内更稳;不建议直接设off,仅调试时临时用go get -insecure -
GOPRIVATE=git.internal.company,github.company.com:列出所有私有域名(逗号分隔),确保这些路径的模块不走代理,也不查 checksum server -
GOINSECURE仅用于 HTTP 私有 registry,且必须精确到域名,例如GOINSECURE=git.internal.company,不能写*
,direct 这个尾巴——它不是可选项,而是私有模块能工作的前提。很多团队上线后才发现 CI 拉不到内网模块,翻日志看到一堆 GET https://goproxy.cn/xxx/@v/v1.2.3.info 404,却没意识到该让 Go 自动回源。

















