Problem entry · machine-readable · 编码代理与终端

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

本页嵌入 #trove-entity JSON(本条目全量结构化数据);全库数据见 /agent/trove.json。

元数据

idgo-proxy-cn收录2026-08-29
问题域编码代理与终端主题分组网络与镜像
适用工具go · 外部工具

症状

`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](https://github.com/golang/go/issues/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 可正常转发校验和,国内一般不用关)。

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. **校验和**:若 `sum.golang.org` 也超时,可 `GOSUMDB=off`(牺牲供应链校验,不推荐持久化)或 `GOSUMDB=sum.golang.google.cn`(国内可达镜像)。

5. **私有模块**:公司内网模块要配 `GOPRIVATE=公司域名`(自动绕过 proxy 与 sumdb)。

6. **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](https://github.com/golang/go/issues/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)

来源与证据

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

验证证据:Evidence details kept locally (2026-08-29)