go mod download卡住或报404主因是GOPROXY配置错误:必须逗号分隔、direct小写且置于末尾、无空格;私有模块需配GOPRIVATE避免泄露凭证,并配合GOINSECURE和GONOSUMDB处理非HTTPS及校验问题。

go mod download卡住或报404,大概率是GOPROXY写错了
不是网络问题,而是代理链格式或顺序不对。Go 会严格按逗号分隔的顺序尝试每个地址,遇到非网络错误(如404、503)才 fallback,但一旦遇到direct就终止代理逻辑、直连源站——所以direct必须小写、必须在末尾、不能有空格。
-
GOPROXY=https://goproxy.cn,https://mirrors.tuna.tsinghua.edu.cn/goproxy/,direct✅ 推荐写法,国内响应快,清华镜像兜底,最后直连保底 -
GOPROXY=https://goproxy.cn,direct,https://proxy.golang.org❌direct在中间,后面代理永远不生效 -
GOPROXY=https://goproxy.cn , direct❌ 逗号后带空格,Go 解析失败,退回到默认https://proxy.golang.org,direct,在国内基本失效 - 别单独用
https://proxy.golang.org:它不缓存私有模块,且在国内超时后不重试,直接失败
私有模块拉取失败或泄露凭证,缺GOPRIVATE就等于裸奔
只要你的go.mod里引用了公司内网 Git 地址(比如git.internal.company.com/mylib),没配GOPRIVATE,Go 就会把认证头(token、SSH key)原样转发给公共代理,同时校验失败。
- 运行
go env -w GOPRIVATE=git.internal.company.com✅ 告诉 Go 跳过代理、跳过 checksum 校验 - 支持通配符:
go env -w GOPRIVATE=*.company.com,github.com/my-org/private-repo - 如果私有库用 HTTP 或自签名证书,还得补上:
go env -w GOINSECURE=git.internal.company.com - 如果模块没进官方校验库(比如内网自建包),再加:
go env -w GONOSUMDB=git.internal.company.com
go get报“module lookup disabled by -mod=readonly”,和代理无关
这是模块只读模式触发的保护机制,不是代理配置问题。当你在已有go.mod的项目里执行go get,而当前模块模式不允许写入时就会卡住。
- 临时下载不写入:
go get -d github.com/gin-gonic/gin@v1.12.0 - 真正更新依赖并写入
go.mod:go get -u github.com/gin-gonic/gin或先改go.mod再跑go mod tidy - 检查是否启用模块:
go env GO111MODULE应为on;若为auto,在非 GOPATH 路径下也可能误判
IDE(如GoLand)里代理不生效,别只信shell配置
IDE 启动时可能读取自身环境缓存,或忽略 shell 的export,导致go mod tidy在终端能跑,在 IDE 里卡死。
立即学习“go语言免费学习笔记(深入)”;
- 先确认终端里
go env GOPROXY输出正确,再看 IDE Terminal 是否一致 - GoLand:File → Settings → Go → Go Modules → Environment,手动填
GOPROXY=https://goproxy.cn,direct - VS Code:检查
settings.json中是否有"go.toolsEnvVars"覆盖了 GOPROXY - 重启 IDE,或执行
go clean -modcache清掉旧缓存再试
direct位置、GOPRIVATE范围、IDE 环境隔离这三点,漏一个就全盘失效。尤其注意GOPRIVATE必须覆盖所有私有域名,哪怕只漏一个子域名,那个模块就会被发往公共代理,要么404要么泄密。


















