先把 Go 模块代理与网络代理分清

适用于使用 go.mod 的 Go 项目,涵盖 Windows、macOS 和 Linux;环境变量前缀示例仅适用于 macOS/Linux 的 bash 或 zsh。先用 go version 记录安装版本,遇到本机不识别的参数,以 go help 对应命令为准。本文核对官方文档,未运行你的依赖下载或构建。

GOPROXY 要求的是提供 Go 模块下载协议的服务。普通本地 HTTP/SOCKS 代理只转发网络请求,并不会因此成为 Go 模块仓库。把客户端本地端口写进 GOPROXY,可能得到错误页面或不符合协议的响应。

各平台普通终端;只查看选定配置,输出可能含私有地址,留在本地
go version
go env GOPROXY GOSUMDB GOPRIVATE GONOPROXY GONOSUMDB GOENV
  1. 记录首次失败的模块路径、精确版本和请求主机。把模块内容下载、校验服务访问、私有仓库登录分别记下;不要只保留最后一行退出码。
  2. 检查当前终端变量、IDE/CI 配置与以前用 go env -w 保存的默认值是否相符。不要为了排查直接把这些值全部清空。

为什么写了 direct 仍不自动直连

GOPROXY 写法回退条件排查意义
https://proxy.golang.org,direct前一服务返回 404 或 410 才继续超时或其他错误不会因此自动改走源码仓库
URL_A|URL_B前一服务发生任意错误后继续会扩大回退范围,不能随意替换组织规定的逗号
direct直接向版本控制来源获取模块仍可能需要 Git 认证和校验服务;不保证避开所有网络问题

只对已知失败的固定版本做一次验证

先保存项目中尚未提交的 go.mod/go.sum 改动。下面 MODULE_PATH@VERSION 是占位文本,必须替换成报错中那一个准确模块和版本,保留引号即可;不要原样执行,也不要用 latest 把排障变成升级。命令会访问网络、写模块缓存,在项目上下文中还可能更新校验记录,不需要管理员权限。

Windows PowerShell / macOS / Linux;替换占位模块和版本
go mod download -json "MODULE_PATH@VERSION"

查看退出结果和 JSON 中是否有 Error,成功结果可包含 Dir、Zip、Sum 等字段。已存在的缓存也会让下载命令成功,因此这一步只能证明该版本当前可用;不能仅凭成功就声称已验证新的网络路线。

只有确认目标是公开模块、且组织允许访问官方公开模块服务时,才可在 macOS/Linux 临时给这一个进程指定下面的值;它不会执行 go env -w。Windows 本文不提供另一套变量修改脚本,可先按上面的读取结果由开发环境维护者调整,避免遗留全局改动。

macOS/Linux bash 或 zsh;仅本次进程,需替换模块版本占位文本
GOPROXY="https://proxy.golang.org,direct" go mod download -json "MODULE_PATH@VERSION"

校验服务和私有模块各自处理

错误线索应做的检查
模块文件已到手,校验服务请求失败核对失败主机和组织网络路径;不是再换一次源码地址
私有模块被公开服务查询核对 GOPRIVATE 及显式 GONOPROXY/GONOSUMDB 是否符合模块前缀
私有源码仓库认证失败检查该运行环境自己的 Git/仓库授权;GOPRIVATE 不会发放权限
校验和不一致保留模块、版本和错误信息,核实来源;不要关校验后继续构建

GOPRIVATE 为 GONOPROXY 和 GONOSUMDB 提供默认匹配范围;若后两者已有显式配置,不能假设改前者就够了。公司代理统一托管所有模块时,还可能要求私有模块继续经过公司服务,应沿用管理员提供的组合。不要把 GOSUMDB=off 或广泛的 GOINSECURE 当作网络修复。

验证成功的范围,并恢复原设置

  1. 固定版本下载可用后,再运行项目原来的构建或测试。检查 go.mod/go.sum 的差异,仅保留确认需要的变更,不覆盖此前已有的用户修改。
  2. 需要检查已下载缓存有无后续改动时,可在项目目录执行 go mod verify;它不是网络连通性测试,也不表示项目测试通过。
  3. 前缀变量示例会随进程结束失效。如果此前另用 go env -w 改过值,应恢复排查前记录;仅当原来没有持久默认值时才考虑用 go env -u 去掉本次新增项。它不会清除 shell 自己设置的变量。
  4. 保留错误主机、失败阶段、Go 版本和脱敏配置差异作为求助信息,不公开私有模块完整路径、代理 URL 内的认证信息或访问令牌。
各平台;检查模块缓存,可能读取或下载模块元数据并补充 go.sum
go mod verify