一、包管理历史
Golang 的包管理一直被大众所诟病的一个点,但是我们可以看到现在确实是在往好的方向进行发展。下面是官方的包管理工具的发展历史:
- 在 1.5 版本之前,所有的依赖包都是存放在 GOPATH 下,没有版本控制。这个类似 Google 使用单一仓库来管理代码的方式。这种方式的最大的弊端就是 无法实现包的多版本控制,比如项目 A 和项目 B 依赖于不同版本的 package,如果 package 没有做到完全的向前兼容,往往会导致一些问题。
- 1.5 版本推出了 vendor 机制。所谓 vendor 机制,就是每个项目的根目录下可以有一个 vendor 目录,里面存放了该项目的依赖的 package。go build 的时候会先去 vendor 目录查找依赖,如果没有找到会再去 GOPATH 目录下查找。
- 1.9 版本推出了实验性质的包管理工具 dep,这里把 dep 归结为 Golang 官方的包管理方式可能有一些不太准确。关于 dep 的争议颇多,比如为什么官方后来没有直接使用 dep 而是弄了一个新的 modules,具体细节这里不太方便展开。
- 1.11 版本推出 modules 机制,简称 mod。modules 的原型其实是 vgo,关于 vgo,可以自行搜索。
除此之外,社区也一直在有几个活跃的包管理工具,使用广泛且具有代表性的主要有下面几个:
- godep
- glide
- govendor
二、vendor 机制的进步
Go 1.5 引入了vendor 机制,但是需要手动设置环境变量 GO15VENDOREXPERIMENT= 1,Go编译器才能启用。
从Go1.6起,默认开启 vendor 目

本文详细介绍了Go语言的包管理历史,从早期的GOPATH模式到vendor机制的引入,再到1.11版本的modules系统。vendor机制允许项目独立管理依赖,提高代码移植性,但缺乏版本控制。govendor作为vendor的辅助工具,帮助管理vendor目录下的包,但不支持精确版本控制。文章还讨论了vendor的优缺点及社区的其他包管理工具,如godep、glide等。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



