常见原因是go mod vendor只复制实际编译用到的包,而非go.mod中声明的所有包,如_test.go中的导入、//go:embed间接引用、replace指向外部路径未加-v、私有仓库未设GOPRIVATE等均会导致缺包。go mod vendor 生成失败或 vendor 里缺包,常见原因是什么不是命令没跑,而是 go mod vendor 只复制「当前构建实际用到的包」------它不看 go.mod 里写了什么,只看你的 .go 文件里 import 了哪些、且这些 import 是否参与主模块编译。典型缺包场景:某个包只在 _test.go 文件里被 import,而你运行的是 go build(非 go test),它就不会进 vendor/用了 //go:embed 或 //go:generate 间接引用某包,但没显式 import,go mod vendor 会跳过go.mod 里有 replace 指向本地路径,但该路径不在项目内(比如指向 ../common),默认不复制;需加 -v 参数才尝试包含私有仓库依赖未配置 GOPRIVATE,go mod vendor 直接失败,不是静默跳过验证是否全量:运行 go list -f '{{.Dir}}' all | grep '^vendor/' | wc -l,再对比 go list all | wc -l,数字不一致就说明有遗漏。go build -mod=vendor 仍报错"cannot find module providing package"这说明 Go 工具链压根没走 vendor/,而是试图联网拉包。根本原因几乎都是环境或参数没对齐。立即学习"go语言免费学习笔记(深入)";必须同时满足以下三点,-mod=vendor 才真正生效:GO111MODULE=on(Go 1.16+ 默认开启,但 CI 环境常被重置)当前工作目录下存在有效的 go.mod(不能是父目录或子目录的)命令中明确带上 -mod=vendor ------ go run、go test、go list 全部都要加,不能只给 go build 加容易忽略的点:go list -mod=vendor ./... 是最轻量的验证方式,如果它报错找不到包,那其他命令也一定失败。别等 go build 跑一半才暴露问题。离线构建时,为什么删了 vendor 还不行因为 vendor/ 只是表象,真正决定构建成败的是三样东西:go.mod、go.sum、以及工具链对校验和与代理的处理。 Mokker AI AI产品图添加背景
相关推荐
L·S·P14 小时前
25MB 管理 100+ 种数据库:开源轻量客户端 DBX 介绍与上手笃行35016 小时前
KingbaseES KSQL Developer 的连接管理、数据处理与对象管理杨杨杨大侠16 小时前
Jev、Kev、Laya:决策模型怎么选,什么时候需要微调?ha_lydms17 小时前
MaxCompute中加密与解密函数Shadow(⊙o⊙)17 小时前
MySQL内置函数LOVE️YOU17 小时前
Python 在定义函数时,究竟定义的是什么?段一凡-华北理工大学17 小时前
大模型应用开发 100 天:Python + LLM 从入门到精通 day26~Prompt 调试与优化——A/B 测试与效果评估Minecraft红客17 小时前
以撒的结合Circ.17 小时前
Python 调试 Litellm 本地大模型接口:模型列表与对话接口实操踩坑记录笃行35017 小时前
金仓 KingbaseES PL/SQL 开发全攻略:异常处理、数据类型、调试优化与过程语句