go mod download卡住是因GOPROXY和GOSUMDB未正确配置,需设GOPROXY为国内镜像加,direct fallback、GOSUMDB为off或内网校验服务,并用GOPRIVATE显式声明私有域名。

go mod download 卡在 dial tcp 或 context deadline exceeded
这不是代码或模块本身的问题,而是 Go CLI 在尝试连接 proxy.golang.org 或 sum.golang.org 时被阻断。国内多数环境会卡在 DNS 解析、TLS 握手或 TCP 连接阶段,表现为无输出、数十秒后报 context deadline exceeded 或 dial tcp: i/o timeout。
立刻验证:运行 go mod download -v,观察最后几行是否停在 GET https://proxy.golang.org/...;再手动执行那条 curl 命令,看是 DNS 失败、连接超时,还是证书错误。
- 若
curl直接失败,说明代理地址不可达,需换镜像源 - 若
curl成功但go mod download仍卡住,可能是 Go 自带 DNS 解析器异常,可临时加go env -w GODEBUG=netdns=cgo - 别信
go mod download -x的日志——它只显示 proxy 请求路径,不反映direct模式下的真实失败点
GOPROXY 配错导致私有模块 403 或 module lookup failed
设了 GOPROXY=https://goproxy.cn 却没加 ,direct,所有请求(包括公司内网 GitLab、GitHub 私仓)都会转发到镜像站,结果返回 403 Forbidden 或 module lookup failed。
正确写法必须保留 ,direct 作为 fallback,且私有域名要明确加入 GOPRIVATE:
立即学习“go语言免费学习笔记(深入)”;
- 执行
go env -w GOPROXY=https://goproxy.cn,direct - 执行
go env -w GOPRIVATE="git.internal.com,github.com/my-org/*"(逗号分隔,**不能有空格**) - 若用 HTTPS 克隆私有库,还需确保
git能正常认证:运行git ls-remote https://git.internal.com/repo.git测试 - 若用 SSH,检查
ssh -T git@git.internal.com是否通,否则go mod download会在 Git 步骤卡住
局域网离线环境里 go mod download 失败
命令报 Get "https://proxy.golang.org/": dial tcp: i/o timeout 是典型症状。这不是代理没配对,而是 Go 默认仍会尝试访问公网校验服务器 sum.golang.org,哪怕你已设 GOPROXY=off。
必须同时关闭两个开关:
- 执行
go env -w GOPROXY=off和go env -w GOSUMDB=off - 验证:运行
go env GOPROXY GOSUMDB,输出应为off off - 离线缓存必须提前在有网机器上完成:
go mod tidy→go mod download→ 打包整个$GOMODCACHE目录(用go env GOMODCACHE确认真实路径) - 解压到离线机相同路径,并确保
go env GOPATH完全一致,否则 Go 找不到缓存
go get 安装 gopls、dlv 等工具时超时
go get 在 Go 1.16+ 中已被弃用,尤其对 golang.org/x/ 路径的工具,它会绕过 GOPROXY 直连 golang.org,而该域名在国内基本不可达。
改用 go install 并显式指定版本:
- 运行
GO111MODULE=on go install golang.org/x/tools/gopls@latest - 若仍超时,检查是否漏设
GOPRIVATE—— 某些企业环境会把golang.org误判为私有域 - 临时调试可用路径替换:
go install github.com/golang/tools/gopls@latest,但需同步改代码里所有import "golang.org/x/tools/..." - 更稳妥的做法:先配好
GOPROXY和GOPRIVATE,再加go env -w GONOPROXY="golang.org"强制跳过代理(仅限调试)
真正容易被忽略的不是怎么配代理,而是 ,direct 和 GOPRIVATE 的组合逻辑——漏掉任一环,私有模块就会失败;而 GOSUMDB=off 在离线场景下常被遗忘,导致命令卡在校验环节而非下载环节。


















