go语言依赖管理
探索 GO 项目依赖包管理与Go Module常规操作 - 知乎
https://juejin.cn/post/7054513615625256996
演进过程:
GOPATH机制
早期引入GOPATH机制,Go 编译器可以在本地 GOPATH 环境变量配置的路径下,搜寻 Go 程序依赖的第三方包。如果存在,就使用这个本地包进行编译;如果不存在,就会报编译错误。
出现的问题:引入的三方库可能远程迭代,不同时间同样go代码下载的三方库可能不同,不能保证可重现的构建(严重问题)。三方库引入不兼容代码,可能会出现编译错误。
其实是忽视三方库版本问题。
Vendor机制(1.5引入)
在GOPATH环境变量的某个src目录下可以放一个vendor目录,这个存放三方库代码。编译器优先搜索vendor目录下的依赖,其次GOPATH环境变量的三方版本包。
出现问题:如果使用 vendor
机制管理第三方依赖包,最佳实践就是将 vendor
一并提交到代码仓库中。那么其他开发者下载你的项目后,就可以实现可重现的构建。虽然一定程度解决可重现的构建的问题,但是出现新问题ÿ