常见原因是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产品图添加背景
相关推荐
阿昭L7 小时前
数据库期末复习(三)CClaris7 小时前
大模型量化从0到1(五):GPTQ 原理详解 + 从零量化一个真实大模型Railshiqian7 小时前
UserPickerActivity 内部逻辑分析Dlrb12117 小时前
信息查询Web服务器-->电子商城信息查询项目一tiao咸鱼7 小时前
前端转 agent # 02 - FastAPI 框架入门与原理不会写DN7 小时前
MySQL 并发插入竞态问题:原子写入实践指南霖霖总总7 小时前
[MongoDB小技巧24]MongoDB $lookup 聚合阶段深度解析:从入门到实战Yolo566Q8 小时前
Noah-MP陆面过程模型建模方法与站点、区域模拟实践技术应用挨踢诗人8 小时前
京东企业购 × 企业微信 采购闭环集成解决方案梦想的旅途28 小时前
企业微信外部群智能自动回复:基于RPA接口的关键词匹配方案