Golang Go语言中关于 vgo 和 dep 的讨论

发布于 1周前 作者 ionicwang 来自 Go语言

Golang Go语言中关于 vgo 和 dep 的讨论

刚由 PHP 转 Go,Go 的包管理搞得一头雾水。 刚开始用 dep,后来发现 G 家在去年二月份的时候发布了 vgo。 vgo 是亲儿子,而且有些开源项目都开始使用 vgo 了,是不是应该转用 vgo 呢? 现在大家都用什么啊?有哪些坑?推荐哪个?

25 回复

初学而已,用哪个都差不多 dep 也是官方的

更多关于Golang Go语言中关于 vgo 和 dep 的讨论的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


因为 Go 程序是静态编译的,所以你最简单的选择就是将所有要用的库放进去你的版本库里面就可以了。vgo, dep 我们都可以理解他们是官方的试验,他们也没有完全想好该怎么做依赖管理。

PS:两者一定要选一个的话,我选 dep,至少问题少一些,库的支持更好一些。

1.11 可以用 go mod 了,唯一官方工具

直接 go mod 吧 从官方博客 https://blog.golang.org/modules2019 看 go mod 将在 1.13 默认开启并废弃 GOPATH
就一般使用来说 go mod 没什么问题的

go.mod 是唯一选择,其他都是过去式了。

嗯,我也偏向于 dep,有点类似 composer,相对较熟悉

dep 是 vgo (go mod) 之前的包管理,还是存在去关心设置 GOPATH 的问题,go mod 好用些,除非用到 1.11 以下版本,否则无脑推 go mod

go mod 用完之后就会发现秒杀各种 php 的 composer 啥的包管理

推荐 go mod,已经在生产环境用了,还算比较方便了

go mod 的 replace 贼好用, 能无缝替换掉一个包
比如我就把 v2ray-core 替换成了只包含 grpc 调用代码的包
https://github.com/shynome/v2ray-go-grpc-sdk

为啥要搭建私有包仓库

例如你公司的代码是闭源的,而且是模块化开发,又舍不得购买 github 的企业服务……

这个问题问的很没有水平

你这个需求扔到 gitlab 也可以啊。
其实可以通过 git server 和 nginx 搭建一个 repo,我们 CI+docker 这样跑的贼快。

嗯嗯,我们的代码就是放在 gitlab 上的,貌似给 gitlab 配置一个域名就可以了?
主要是不懂 go get 的原理,有没有资料分享一下?

  1. GOPATH 是官方搞出来的玩意儿,强制所有代码都放到 GOPATH 里面,非常恶心。
    2. 大家都对 GOPATH 不爽,于是开发了不少第三方工具,dep 是第三方开发的,但是之前有 Go 官方站台。
    3. Go 官方团队自己也发现问题了,于是开发了 vgo,并且宣布不要 dep 了。

    大概就是这样。

go mod(vgo)才是现在及未来的唯一指定官方包管理

哦,我理解错了,我以为楼主要搞个全部包的镜像

go mod,replace 真的好用

到底用啥,我都学不动了。

  1. go mod 需要 1.11 和 1.11 后的版本,在 1.11 之前的建议用 dep,从 dep 到 go mod 是支持迁移的当然 vgo 也行,我们采坑后认为 dep 比 vgo 好用,所有现在线上就保留 go mod 和 dep 两种,应对新旧版本。
    2.关于私服,go mod 有 https://github.com/gomods/athens

    能上 go mod 就用 go mod

我目前用的 dep,但是跟喜欢 go mod。目前不用 vgo 主要是 emacs 相关的包代码补全、import 会有各种各样的小问题。写代码不是很爽,等支持的好点了,就切 go mod

关于Golang中vgo和dep的讨论,作为IT领域的GO语言专家,以下是我的观点:

vgo是Go语言为了解决版本和依赖管理问题而推出的一个参考实现,它最终引导出了Go modules的引入。Go modules提供了一种语义化的依赖描述方式,在.mod文件中描述模块及其依赖,解决了之前没有地方记录依赖包具体版本的问题。

而dep则是Go语言社区在早期尝试的一个包管理工具,它允许开发者指定项目的依赖关系以及版本。然而,dep并未成为官方的包管理工具,Go团队最终选择了modules作为官方解决方案。

相比之下,Go modules具有更好的兼容性和易用性。它允许开发者在项目的根目录下创建一个go.mod文件来定义模块及其依赖关系,并且可以自动下载和管理依赖包。此外,Go modules还支持版本控制和语义化版本,使得依赖管理更加精确和可靠。

因此,对于新的Go项目来说,建议使用Go modules进行依赖管理。而对于还在使用dep或GOPATH进行依赖管理的旧项目来说,也可以考虑迁移到Go modules以提高项目的稳定性和可维护性。

回到顶部