必须启用-go-get-v-x才能看到模块下载真实日志,否则静默卡住;常见卡点包括代理url末尾缺斜杠致404、sum.golang.org不可达致校验重试、goproxy被静默忽略走direct模式。

日志里根本没记录模块下载过程?先确认go命令是否启用了详细日志
Go 的 go get 或 go build 默认不输出模块下载细节,你看到的“卡住”或“超时”,往往只是终端静默——不是没日志,而是没开。必须显式启用 -v(verbose)和 -x(显示执行命令)才能看到真实行为:
-
go get -v -x golang.org/x/net/http2会打印每一步:解析 module proxy、发起 HTTP GET、读取响应头、解压 zip、校验 checksum - 若卡在某行(比如停在
GET https://goproxy.cn/golang.org/x/net/@v/v0.28.0.mod后无响应),说明是网络层问题;若卡在fetching ...之后很久才出现unzip,可能是代理返回了不完整响应或客户端解压失败 - 注意:
go env -w GOPROXY=direct会绕过所有代理直接连proxy.golang.org,此时-x日志会暴露 DNS 解析失败或 TLS 握手超时(常见于大陆环境)
从 go list -m -u -v all 日志识别代理跳过行为
很多“下载慢”实际是根本没走代理——go 命令在某些条件下会静默回退到 direct 模式,且不报错。运行 go list -m -u -v all 可强制触发模块解析并输出来源路径:
- 如果某模块显示
→ indirect且后面跟着https://proxy.golang.org/...,说明它正尝试走官方代理(大概率失败) - 如果显示
→ /path/to/local/cache或直接是github.com/user/repo v1.2.3无 URL,则说明GOPROXY被忽略,或GO111MODULE=off导致降级为 GOPATH 模式 - 关键线索:检查输出中是否有
using github.com/user/repo@v1.2.3 via github.com/user/repo这类“via”字段——这表示 go 正在尝试用 git clone 替代 proxy 下载,意味着代理配置失效或模块被GOPRIVATE排除
HTTP 代理日志里藏着重定向与 404 错误
如果你已配置了 GOPROXY=https://mirrors.aliyun.com/goproxy/,但下载仍慢,很可能是因为该地址少了一个末尾斜杠——go 会把它拼成 https://mirrors.aliyun.com/goproxy/golang.org/x/net/@v/v0.28.0.mod,而阿里云镜像实际要求路径是 https://mirrors.aliyun.com/goproxy//golang.org/x/net/@v/v0.28.0.mod(注意双斜杠)。这时 HTTP 返回 404,go 会自动 fallback 到下一个代理(如果配置了多个),导致明显延迟。
- 验证方式:用
curl -v https://mirrors.aliyun.com/goproxy/golang.org/x/net/@v/v0.28.0.mod,看是否返回 404;再试curl -v https://mirrors.aliyun.com/goproxy//golang.org/x/net/@v/v0.28.0.mod(带双斜杠) - 正确配置应为
go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,https://goproxy.cn,direct—— 注意第一个 URL 末尾有逗号分隔,且goproxy.cn不需要斜杠 - 若使用
goproxy.cn但仍慢,检查日志里是否有302 Found重定向到七牛 CDN 域名;部分企业防火墙会拦截或限速重定向后的域名
checksum 验证失败导致反复重试
当 GOSUMDB=off 被禁用(默认开启),而 sum.golang.org 不可达时,go 不会立即报错,而是反复重试校验——每次失败后等待几秒再试,造成“假性缓慢”。日志中会出现类似:
verifying golang.org/x/net@v0.28.0: checksum mismatch downloaded: h1:AbC...XYZ= go.sum: h1:Def...UVW=
这不是下载慢,是校验卡死。解决方法不是关掉校验,而是换可用的 sumdb:
- 运行
go env -w GOSUMDB=sum.golang.org+replace=gosum.io+ca=trusted(仅限可信内网) - 或临时用
go env -w GOSUMDB=off快速验证是否真由校验拖慢;确认后务必恢复校验机制 - 注意:
GOSUMDB=off仅影响校验阶段,不影响下载本身;若关闭后速度突增,瓶颈就在这里
真正卡住的地方,往往不在下载动作本身,而在代理选择逻辑、URL 构造规则、或 checksum 回源策略这些隐式环节。别只盯着“下载慢”三个字,先让 go 把它干了什么全吐出来。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!











