dns解析失败导致go mod download报错,需先验证proxy.golang.org能否解析,再检查goproxy设置是否正确、环境变量是否生效,最后处理sum.golang.org校验问题。

go mod download 报错 lookup proxy.golang.org: no such host 是 DNS 解析失败
这不是 Go 本身的问题,而是你的本地 DNS 无法解析 proxy.golang.org 或 sum.golang.org。国内常见情况是运营商 DNS(如 114.114.114.114)直接返回 NXDOMAIN,或中间被劫持/缓存污染。
- 先验证:运行
dig proxy.golang.org +short或nslookup proxy.golang.org,看是否返回 IP;若为空或报错,就是 DNS 层面没通 - 别急着换代理——如果 DNS 都解析不了,设
GOPROXY也白搭,因为 Go 还是得先查域名 - 临时测试可改用公共 DNS,比如
1.1.1.1或8.8.8.8(Linux/macOS 改/etc/resolv.conf,Windows 在网络适配器里手动填)
设置了 GOPROXY 但依然走原始域名,说明环境变量没生效
go mod download 会严格按顺序检查:先看 GOPROXY,再 fallback 到 direct(即直连官方域名)。如果你看到日志里出现 GET https://proxy.golang.org/... 失败,但后续又尝试 https://goproxy.io/... 或直接 https://github.com/...,大概率是 GOPROXY 值写错了或没加载。
- 确认值是否含协议和尾部斜杠:
export GOPROXY=https://goproxy.cn✅,export GOPROXY=goproxy.cn❌(缺https://) - 检查是否被其他脚本覆盖:在执行
go mod download前加一句echo $GOPROXY,确保输出是你设的地址 - Windows 用户注意:PowerShell 和 CMD 的环境变量设置方式不同,
$env:GOPROXY="https://goproxy.cn"(PS)和set GOPROXY=https://goproxy.cn(CMD)不互通
go mod download 卡在某个 module,可能是 sumdb 校验失败触发 DNS 回退
Go 默认启用校验和数据库(sum.golang.org),即使你设了 GOPROXY,它仍会单独请求 sum.golang.org 做完整性校验。一旦这个域名解析失败,整个 download 就会卡住或报 verifying ...: checksum mismatch。
- 快速绕过:加
-insecure参数(仅调试用)go mod download -insecure,但这会跳过所有校验,不推荐长期使用 - 稳妥做法:把 sumdb 也代理掉,设
GOSUMDB=off(完全关闭)或GOSUMDB=sum.golang.org+https://goproxy.cn/sumdb(部分镜像支持,如 goproxy.cn) - 注意:某些私有模块或企业内部 proxy 不提供 sumdb 接口,此时必须关掉校验,否则下载必然中断
公司内网或 CI 环境里 go mod download 失败,常因 DNS 策略隔离
很多企业 DNS 不允许解析外部域名,或者只放行特定白名单(比如只许查 github.com,但拦了 proxy.golang.org)。这时候改本地 resolv.conf 没用,因为 DNS 请求根本出不去。
立即学习“go语言免费学习笔记(深入)”;
- 优先联系运维:确认是否开放了
proxy.golang.org、sum.golang.org、gocenter.io等常用代理域名 - CI 脚本里别依赖 shell 配置文件(如
.bashrc),务必显式 export:export GOPROXY=https://goproxy.cn; export GOSUMDB=off - 极少数情况需要自建 DNS 转发规则,比如用 CoreDNS 把
*.golang.org转给 1.1.1.1,而不是硬编码 hosts —— hosts 对 HTTPS SNI 不生效
dig 和 echo $GOPROXY 两个命令,90% 的 go mod download 失败都能定位到根上。










