go mod vendor 正确使用姿势?

201 天前
 douz

要下班了,摸一会儿鱼。

想到一个问题就是如果把 vendor 目录纳入 git 管理,但是如果在 windows 下和 linux 下同时进行开发,用的 go sdk 都是不一样的,go mod vendor 好像就有问题。

  1. 需要把 vendor 目录纳入 git 管理么?
  2. 一般什么情况下使用 vendor?
2026 次点击
所在节点    Go 编程语言
25 条回复
mooyo
201 天前
五年前就不用 vendor 了吧,老项目吗?
Cannian
201 天前
现在都用 mod 了,老项目才用 vendor
Nazz
201 天前
我现在用 go mod tidy 了, 以前喜欢 vendor
douz
201 天前
@Cannian 如果是容器环境,直接设置一下 go proxy, 然后 go mod download 就行了么?
lasuar
201 天前
只有当你用到了那种私有库、临时库,担心引用的库未来可能消失 的时候才会用 vendor 。不过开发时也不好用,比如下载了新库时,直接在 IDE 中输入是不能自动识别的(纯 mod 模式就可以)。现在我都不用 vendor 了,如果有那种比较重要的库,干脆直接 down 下来放本地的 internal pkg 。
Cheivin
201 天前
如果你用私有库还要把代码跟项目 git 一起,用 go mod 然后 repace 路径吧
Cheivin
201 天前
@Cheivin #6 打错了,是 replace
Trim21
201 天前
> 但是如果在 windows 下和 linux 下同时进行开发,用的 go sdk 都是不一样的,go mod vendor 好像就有问题

会有啥问题? go mod vendor 会选择只 vendor _linux 文件或者 _windows 文件然后忽略另一个吗?
icy37785
201 天前
vendor 是坏文明,vendor 的正确使用姿势就是不用。
sardina
201 天前
https://github.com/goproxy/goproxy 内网搭建一个 goproxy
stormtrooperx5
201 天前
咋这么多人不用 vendor ?镜像打包速度快很多啊
iyaozhen
201 天前
99%场景不需要 go mod vendor

现在唯一用 vendor 的地方,是要打 go 插件,而且也不把 vendor 提交到 git ,而是 CI 环境固定 go 版本(宿主要和插件一模一样版本号),执行 go mod vendor 后再 build
HappyAndSmile
201 天前
@stormtrooperx5 自己搭一个 go mod proxy ,为什么会需要 vendor ?为什么会慢?
Cannian
201 天前
@douz 你可以网上找找别人的 dockerfile 文件,你这样是可以的。一般还有两阶段构建之类的操作减少镜像体积,不在意也可以不用管
arcfya
201 天前
除非特殊环境一定不允许开 go mod proxy (比如各种政府国企单位),不然不推荐使用 vendor 。

vendor 在不同 go sdk 下确实可能有问题,比如 go 的那几个 crypto 库,我就遇到过 sdk 不兼容的问题
stormtrooperx5
201 天前
@HappyAndSmile 依赖库多了再怎么自建 proxy 也比不上直接读本地快
zgh123
201 天前
如果旧项目采用的 vendor ,如何升级把 vendor 目录从 git 中去除呢?
lasuar
200 天前
@zgh123 #17 你这个问题直接 kimi 可以解决,我就不贴答案了。问题是“采用 vendor 模式的 go 项目中,如何升级把 vendor 目录从 git 中去除。注意,vendor 内可能有已经失效的远程库,此时如何区分”。

解决的关键是在本地新建 xvendor 目录存放失效的远程库,然后在 go.mod 文件中使用 replace 语法帮助 go 定位这些库。
to2false
200 天前
vendor 放进 git ,我就有个问题,是不考虑 code review 吗
stormtrooperx5
200 天前
@to2false 自动排除 vendor 目录,这不就一行脚本的事

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1115861

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX