go mod download 不是“一键离线构建”的银弹,它默认只下载直接依赖,遗漏间接依赖;需用 go mod download all 覆盖完整模块图,但不处理 replace、vendor 冲突,也不校验或更新 go.sum,离线构建前须验证 goproxy、gosumdb 及缓存路径一致性。

go mod download 不是“一键离线构建”的银弹,它只下载、不校验 go.sum、不处理 replace 和 vendor 冲突,用错就白忙活。
go mod download 默认只下直接依赖,间接依赖可能漏掉
执行 go mod download(不带参数)时,Go 只解析 go.mod 中显式 require 的模块,忽略标记为 // indirect 的依赖。这意味着:如果某个包仅被子依赖引用,而你的代码没直接 import 它,它就不会被拉下来。
- 常见现象:
go build时突然报go: downloading github.com/some/pkg@v0.1.0,说明该模块之前没下全 - 正确做法:用
go mod download all,它等价于go list -m all | xargs go mod download,覆盖整个模块图(不含replace到本地路径或vendor内的模块) - 注意:
all是关键字,不是 shell 通配符;在 module-aware 模式下更稳定,比./...更可靠
下载失败几乎都卡在 GO_PROXY 或 direct 请求被拒
默认 GO_PROXY=https://proxy.golang.org,direct,但国内访问前者常超时,direct 又因模块服务器限流或无认证直接拒绝请求——这导致 go mod download 卡住或报 Get \"https://.../.../...\": context deadline exceeded。
Go语言(Golang)1.26.0版本提供 Go 官方 Windows amd64 MSI 安装包下载入口,版本号 1.26.0,可用于旧项目维护、兼容性测试和指定版本开发环境配置。
- 临时修复:运行
go env -w GO_PROXY=https://goproxy.cn(或https://goproxy.io) - 内网场景:设
go env -w GO_PRIVATE=git.internal.company.com/*并保留direct,否则私有模块会走代理失败 - 别信
-x输出:它只显示 proxy 请求日志,direct失败细节需加GODEBUG=http2debug=2才能看到
它不碰 go.sum,改了版本后必须手动刷新校验
go mod download 只把源码存进 $GOMODCACHE,完全不读写 go.sum。如果你手动改过 go.mod 里的版本号,而 go.sum 还留着旧哈希,后续 go build 就会爆 verifying github.com/x/y@v1.2.3: checksum mismatch。
- 安全流程:改完
go.mod后,先跑go mod tidy——它会重新 fetch、校验、更新go.sum - 想跳过校验?不行。
go mod download强制校验,这是设计底线;真要绕过,得关GOSUMDB=off,但仅限离线调试,不可上生产 - 验证是否干净:执行
go mod verify,输出all modules verified才算真正就绪
离线部署前必须确认三件事,缺一不可
光跑 go mod download all 不等于能离线构建。Go 构建阶段仍可能触发网络请求,尤其当涉及 //go:embed、cgo、或特定 // +build tag 分支时,go list -m all 可能压根没覆盖到这些模块。
- 检查
replace:运行go list -m -f '{{.Replace}}' all | grep -v '^<nil>$'</nil>,若输出非空,说明有重定向到远程 URL 的模块,go mod download会跳过它们 - 模拟离线构建:设
GOPROXY=off GOSUMDB=off,再跑go build -v -a ./...,观察是否有新Fetching日志 - 缓存路径一致性:离线机的
$GOMODCACHE必须和下载机完全一致;用go env GOMODCACHE确认,别只看$GOPATH
最容易被忽略的是:go mod download 下载的是源码压缩包(.zip),不是解压后的目录;它也不生成 vendor/。如果你项目里已有 vendor,go build 默认优先读它,缓存下载再全也白搭。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!










