编码代理与终端 · 收录于 2026-08-29 · 适用 1 工具 ✓ 实测验证

go get/go mod download 超时(dial tcp ... i/o timeout)→ 换 GOPROXY 国内代理

已验证 2026-08-29go get 超时——临时换国内代理:GOPROXY=https://goproxy.cn,direct go mod download。

快速修复

# 一键:临时换 goproxy.cn(direct 兜底回源)
GOPROXY=https://goproxy.cn,direct go mod download

你会遇到什么

go get / go mod download / go build(首次拉依赖)报 go: ...: Get "https://proxy.golang.org/...": dial tcp 142.250.69.177:443: i/o timeout。

报错 IP 是 Google 网段(142.250.x / 142.251.x / 173.194.x)——国内网络直连 Go 默认代理必超时;同一台机器过段时间又可能通,是网络波动,不是代码问题。

本文路径:快速修复(30 秒一段命令)→ 一步步排查(可跳读)→ 原理与变体(症状/原因/证据)。赶时间直接跳到「快速修复」。

为什么会这样

Go 默认模块代理 proxy.golang.org(以及校验和 sum.golang.org)托管在 Google 基础设施上,国内直连不稳定,TCP 拨号直接 i/o timeout。国内公共代理 goproxy.cn(七牛)是官方文档推荐给中国用户的方案,还有 goproxy.io、公司内网 Athens/nexus 等。

Go 模块下载是「GOPROXY 寻址 + GOSUMDB 校验」两段:GOPROXY 决定从哪个代理拉模块(默认 proxy.golang.org 托管在 Google 基础设施,国内直连 TCP 拨号 i/o timeout);GOSUMDB 决定从哪个校验和服务器验证模块哈希(默认 sum.golang.org 同样不可直连)。

只换 GOPROXY 不处理 GOSUMDB,下载仍可能卡在校验和阶段;goproxy.cn 等国内代理通常同时提供 sumdb 代理(GOSUMDB=sum.golang.google.cn 或代理自带的 sumdb 服务)。

确定性推论:go mod download 卡住先看卡在哪一段——GOPROXY 段(拉模块)还是 GOSUMDB 段(验哈希),go env GOPROXY GOSUMDB 看当前值;国内环境标准配置 GOPROXY=https://goproxy.cn,direct GOSUMDB=sum.golang.google.cn;

公司内网用 Athens/nexus 时,GOSUMDB 可能要设 off(内网代理自带完整性校验,信任链不同);

判断路径:报错 URL 是 proxy.golang.org = GOPROXY 问题,是 sum.golang.org = GOSUMDB 问题。

一步步来

1. 临时 — 必做

GOPROXY=https://goproxy.cn,direct go get ...

2. 持久化(用户级) — 必做

go env -w GOPROXY=https://goproxy.cn,direct
go env -w GOSUMDB=sum.golang.org

goproxy.cn 可正常转发校验和,国内一般不用关 sumdb。

3. 优先级注意 — 必做

环境变量 GOPROXY=...(export 在 shell/系统里)> go env -w 写入值 > 默认值。

shell 里 export 了 GOPROXY 时 go env -w 不生效(实测警告:does not override conflicting OS environment variable)——改 export 那一处(~/.bashrc / /etc/environment),或显式 GOPROXY=... go ...。

4. 校验和也超时 — 必做

GOSUMDB=sum.golang.google.cn(国内可达镜像),或 GOSUMDB=off(牺牲供应链校验,不推荐持久化)。

5. 私有模块 — 必做

公司内网模块配 GOPRIVATE=公司域名(自动绕过 proxy 与 sumdb)。

6. CI — 必做

GitHub Actions 上 actions/setup-go 默认 OK,但自建 CI 在国内要显式配 GOPROXY。

怎么确认修好了

拉依赖正常(实测输出形态):

GOPROXY=https://goproxy.cn,direct 拉 cobra v1.8.1 + pflag 仅 2.3s(exit 0,实测)

复现基线:GOPROXY=https://proxy.golang.org,direct 拉同一版本 → dial tcp 142.250.69.177:443: i/o timeout(30s,实测,与 golang/go#63244 同款)。

其它环境的表现

环境说明
校园网/家宽无代理直连 proxy.golang.org 基本必超时
环境变量冲突go env -w 不覆盖 export,改源头
sumdb 超时sum.golang.google.cn 或 GOSUMDB=off
私有模块GOPRIVATE 绕过
CI自建 CI 显式配 GOPROXY

症状

go get / go mod download / go build(首次拉依赖)报:

go: github.com/spf13/cobra@v1.8.1: Get "https://proxy.golang.org/github.com/spf13/cobra/@v/v1.8.1.info": dial tcp 142.250.69.177:443: i/o timeout

特征:报错 IP 是 Google 网段(142.250.x / 142.251.x / 173.194.x); 国内网络(校园网/家宽无代理)直连 proxy.golang.org 基本必超时(golang/go#63244、#34548、#49201 等一批); 同一台机器过段时间又可能通——网络波动,不是代码问题。

同族但根因不同(别在本页死磕网络):

  • checksum mismatch(模块校验和不符)→ 代理缓存不同步,go clean -modcache 后重新下载(机制核对);
  • no space left on device(下载/构建阶段)→ 磁盘满;WSL 下 df 有空间但写不进是宿主盘满,先查 df -h /mnt/c。

原因

Go 默认模块代理 proxy.golang.org(以及校验和 sum.golang.org)托管在 Google 基础设施上, 国内直连不稳定,TCP 拨号直接 i/o timeout。 国内公共代理 goproxy.cn(七牛)是官方文档推荐给中国用户的方案,还有 goproxy.io、公司内网 Athens/nexus 等。

解法

  1. 临时:GOPROXY=https://goproxy.cn,direct go get ...(direct 兜底回源);
  2. 持久化(用户级):go env -w GOPROXY=https://goproxy.cn,direct(写入 go env -w 配置文件);

同时建议 go env -w GOSUMDB=sum.golang.org(goproxy.cn 可正常转发校验和,国内一般不用关)。

  1. 优先级注意:环境变量 GOPROXY=...(export 在 shell/系统里)> go env -w 写入值 > 默认值。

如果 shell 里 export 了 GOPROXY,go env -w 不会生效(实测警告:does not override conflicting OS environment variable), 要么改 export 的那一处(~/.bashrc / /etc/environment),要么显式 GOPROXY=... go ...。

  1. 校验和:若 sum.golang.org 也超时,可 GOSUMDB=off(牺牲供应链校验,不推荐持久化)或 GOSUMDB=sum.golang.google.cn(国内可达镜像)。
  2. 私有模块:公司内网模块要配 GOPRIVATE=公司域名(自动绕过 proxy 与 sumdb)。
  3. CI:GitHub Actions 上 actions/setup-go 默认 OK,但自建 CI 在国内要显式配 GOPROXY。
验证证据
  • 本地实测(2026-08-29,WSL Ubuntu,go 1.26.4,校园网无代理):
  • 基线:本机已配 GOPROXY=https://goproxy.cn,direct(环境变量)——goproxy.cn 拉 cobra v1.8.1 + pflag 仅 2.3s(exit 0);
  • 复现:显式 GOPROXY=https://proxy.golang.org,direct 拉同一版本 → dial tcp 142.250.69.177:443: i/o timeout(30s),与 golang/go#63244 同款;
  • 优先级实测:shell 环境变量存在时 go env -w GOPROXY=... 报 warning「does not override conflicting OS environment variable」,go env GOPROXY 仍是环境变量值;
  • 持久化链路:go env -w GOPROXY=https://goproxy.cn,direct 在无环境变量冲突时写入配置(本次因环境变量优先未生效,如实记录)。
  • 实测复现日志(2026-08-29)

相关 canonical

按「同根(国内换源家族)」读:

适用工具 (1)

本问题方案已挂到下列工具的方案页——从工具页也能回到这里,双向可达。

go · 外部工具

成套方案 (组合包)

这个问题包含在下列成套安装方案中。

来源与证据

收录 验证 ✓ 实测验证适用 1 工具
方案含本地实测或来源可复核的解法;未实测项已在文中如实标注。

素材来源:https://github.com/golang/go/issues/63244

← 编码代理与终端 问题域 | 问题货架 | 遇到其它问题?去 问题空间 提交求助卡