go mod download卡住主因是goproxy配置不当或环境变量未生效:缺direct兜底、goprivate未覆盖私有域名、ide终端未重载环境变量,或go get绕过代理。

go mod download 卡在 dial tcp 或 context deadline exceeded
这不是代码写错了,而是 Go CLI 在尝试连接默认代理 https://proxy.golang.org 时被阻断或响应极慢。现象是命令长时间无输出,Ctrl+C 也不生效——因为底层 net.Dial 没设 timeout,会死等 DNS 解析或 TCP 握手完成。
- 先验证是否真卡在代理:运行
go mod download -v,看最后一条日志是不是GET https://proxy.golang.org/... - 临时绕过代理确认问题根源:
GOPROXY=direct go mod download -v。如果立刻失败(报 404 或 unknown revision),说明是模块路径或私有库问题;如果仍卡住,则可能是 Git 协议、SSH key 或 HTTPS 凭据问题 - 强制改用系统 DNS 解析器缓解慢 DNS:
go env -w GODEBUG=netdns=cgo,尤其在 WSL 或 Docker 环境下有效
GOPROXY 配置漏掉 direct 导致私有模块 403
只设 GOPROXY=https://goproxy.cn 是常见错误。Go 会把所有模块(包括 gitlab.internal.com/my/lib)都转发给镜像站,而镜像站无法访问你的内网地址,返回 403 或 404。
Go语言(Golang)1.26.0版本提供 Go 官方 Windows amd64 MSI 安装包下载入口,版本号 1.26.0,可用于旧项目维护、兼容性测试和指定版本开发环境配置。
- 必须写成
go env -w GOPROXY="https://goproxy.cn,direct"——direct是兜底项,不是可选项 - 若私有域名较多,优先用
GOPRIVATE显式声明:go env -w GOPRIVATE="gitlab.internal.com,github.com/my-org/*",避免依赖direct的隐式行为 - 注意逗号分隔、**不能有空格**,通配符
*只支持末尾匹配,不支持正则
IDE 终端读不到你刚设的 GOPROXY
Goland、VSCode 内置终端常沿用自己启动时加载的环境变量,和你当前 shell 中执行 go env -w GOPROXY=... 的结果不一致。改完后命令行能用,IDE 里依然超时,大概率是这个原因。
- 在 IDE 的终端里也手动执行一遍
go env -w GOPROXY="https://goproxy.cn,direct" - 或检查 IDE 设置页:Goland → Settings → Go → GOPROXY;VSCode → Settings → Extensions → Go → GOPROXY,确保没被覆盖
- 重启 IDE 终端(不是仅关再开新 tab),让环境变量重载
go get 安装 gopls/dlv 等工具仍超时
go get 在 Go 1.16+ 已不推荐,它会绕过 GOPROXY 直连 golang.org/x/... 路径,而该域名在国内基本不可达。
- 改用
GO111MODULE=on go install golang.org/x/tools/gopls@latest,这是官方推荐方式 - 若仍失败,说明
GOPROXY没生效或GOPRIVATE漏配了工具依赖的私有子模块 - 极端情况可临时关闭校验:
go env -w GOSUMDB=off,但仅限调试,切勿长期开启
GOPROXY 缺 direct、GOPRIVATE 没覆盖全、IDE 环境变量滞后、go get 仍在用旧路径——这些点只要漏一个,就会卡在看似随机的位置。golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!










