go mod vendor 命令将依赖复制到 vendor 目录实现本地化管理,需确保模块模式启用(含 go.mod 文件且 GO111MODULE=on),执行后生成 vendor/modules.txt,可通过 -mod=vendor 验证生效。

在 Go 中使用 go mod vendor 命令,可以把当前模块所依赖的所有第三方包完整复制到项目根目录下的 vendor 目录中,实现依赖的本地化管理。这有助于构建可重现、离线可用、或对依赖版本有强管控需求的项目。
确保已启用 Go Modules
Go 1.11+ 默认启用模块支持,但需确认环境处于模块模式:
- 项目根目录下存在
go.mod文件(若无,运行go mod init初始化) -
环境变量
GO111MODULE推荐设为on(尤其在$GOPATH外开发时),避免意外进入 GOPATH 模式 - 可通过
go env GO111MODULE查看当前值
执行 vendor 命令
在项目根目录(即含 go.mod 的目录)中运行:
go mod vendor
该命令会:
立即学习“go语言免费学习笔记(深入)”;
- 解析
go.mod中声明的所有依赖(包括间接依赖// indirect) - 将这些依赖的全部源码(不含测试文件、文档等非必要内容)复制到
vendor/目录 - 生成或更新
vendor/modules.txt,记录 vendor 中每个包的精确版本和校验信息
验证 vendor 是否生效
启用 vendor 模式后,Go 工具链会优先从 vendor/ 加载依赖,而非远程或本地缓存。验证方式:
- 编译时加
-mod=vendor参数:如go build -mod=vendor,强制仅使用 vendor 内容 - 设置环境变量
GOFLAGS="-mod=vendor",使所有 go 命令默认走 vendor - 删除
$GOPATH/pkg/mod/cache后尝试构建,若仍成功,说明 vendor 完整可靠
注意事项与常见问题
vendor 不影响 go.mod 或 go.sum 的更新逻辑:添加新依赖仍需 go get 或手动修改 go.mod,再运行 go mod vendor 同步 vendor。
vendor 目录不自动提交到 Git? 通常建议提交 vendor/(尤其在 CI/CD 或封闭环境),但需注意:
- 确保
vendor/modules.txt与go.mod一致(运行go mod vendor会自动同步) - 避免手动修改
vendor/下的文件,否则易导致不一致 - 若项目体积敏感,可考虑不提交 vendor,改用
go mod download+ 缓存策略
清理 vendor:直接删除 vendor/ 目录即可;重新生成只需再次运行 go mod vendor。










