答案:需先验证dns是否能解析proxy.golang.org,再确认goproxy配置正确且生效,最后处理sum.golang.org校验问题;dns不通时设代理无效,必须改用公共dns或修复解析,goproxy须含https://前缀且环境变量生效,gosumdb=off可绕过校验失败。

go mod download 报 lookup proxy.golang.org: no such host 怎么办
这不是 Go 的 bug,是本地 DNS 根本查不到这个域名。运营商 DNS(比如 114.114.114.114)常直接返回 NXDOMAIN,或中间被劫持/缓存污染。
先验证 DNS 是否通:dig proxy.golang.org +short 或 nslookup proxy.golang.org。如果没输出 IP,说明解析层就断了——此时设 GOPROXY 也没用,Go 还是得先 resolve 域名。
- 临时换公共 DNS:Linux/macOS 改
/etc/resolv.conf加一行nameserver 1.1.1.1;Windows 在网络适配器里手动填8.8.8.8 - 别只改
GOPROXY就以为万事大吉——DNS 不通,代理地址再对也发不出请求 - 容器或 CI 环境中,
/etc/resolv.conf可能为空或指向127.0.0.11(dockerd 内置 DNS),必须显式覆盖
设置了 GOPROXY 为什么还是去连 proxy.golang.org
Go 会严格按 GOPROXY 值顺序尝试,但前提是环境变量真生效了。常见失效场景比你想象的多。
检查三件事:echo $GOPROXY 输出是否是你设的地址;值是否带 https:// 前缀(goproxy.cn ❌,https://goproxy.cn ✅);Windows 下 PowerShell 和 CMD 的设置不互通。
Go 配置库,使用 spf13/viper — 分层优先级(flag > env >file > KV > default),提供 BindPFlag/BindPFlags、SetEnvPrefix + SetEnvKeyReplace 等功能。
- 如果日志里出现
GET https://proxy.golang.org/...,大概率是GOPROXY没加载成功,或者被后续脚本覆盖 - 某些 CI 环境(如 GitHub Actions)需在
env:块里显式声明,不能只靠go env -w - Alpine 镜像中
net.DefaultResolver不读resolv.conf的options timeout:,别指望配置文件生效
go mod download 卡住或报 verifying : checksum mismatch
即使 GOPROXY 设对了,Go 默认仍会单独访问 sum.golang.org 做校验。这个域名一解析失败,整个下载就卡死或报错。
绕过方式有两种:go mod download -insecure(仅调试,跳过所有校验);或关掉 sumdb:go env -w GOSUMDB=off(推荐开发/内网环境)。
- 企业私有 proxy 若不提供
sumdb接口(如多数自建 Nexus、Artifactory),必须关校验,否则必然中断 -
GOSUMDB=sum.golang.org+https://goproxy.cn/sumdb仅部分镜像支持(如goproxy.cn),别默认认为所有代理都兼容 - CI 构建时若用
go build而非go mod download,同样会触发 sumdb 校验,需统一处理
内网服务域名(如 redis.prod.internal)解析总返回空切片
net.LookupHost 只查 A 记录且完全依赖系统 resolver,而内网域名通常靠 CoreDNS 或私有 DNS 服务器——系统 DNS 配置不对,它就静默失败。
正确做法是显式构造 *net.Resolver 并指向你的内网 DNS 地址(如 10.96.0.10:53),且必须设 PreferGo: true,否则仍走系统配置。
- 别漏
context.WithTimeout,UDP 丢包时 goroutine 会卡住几十秒 -
net.LookupIP返回 IPv4/IPv6 字符串,拼ip.String() + ":80"在 IPv6 下非法,优先用resolver.LookupIPAddr - Kubernetes Headless Service 场景下,用
r.LookupIP(ctx, "ip", domain)拿全量 Pod IP,传"ip4"会丢 IPv6
GOPROXY 不生效 → sumdb 回退 → 内网域名又查不到。每个点都得单独验证,不能假设“设了代理就全通”。golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!










