当前位置: 首页>前端>正文

Golang基础8-go语言依赖管理

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 一并提交到代码仓库中。那么其他开发者下载你的项目后,就可以实现可重现的构建。虽然一定程度解决可重现的构建的问题,但是出现新问题,我们要对vendor目录下的依赖进行管理,其次由于需要入库,不仅占用代码仓库空间,减慢仓库下载和更新的速度,而且还会干扰代码评审,对实施代码统计等开发者效能工具也有比较大影响

3. Go Module机制(1.11引入,推荐)

// 创建go mod
go mod init 项目

//自动更新当前module的依赖信息
go mod tidy

// 执行新的module构建
go build

go.sum存放哈希值,当将来这里的某个 module 的特定版本被再次下载的时候,go 命令会使用 go.sum 文件中对应的哈希值,和新下载的内容的哈希值进行比对,只有哈希值比对一致才是合法的,这样可以确保你的项目所依赖的 module 内容,不会被恶意或意外篡改。


https://www.xamrdz.com/web/2u51936596.html

相关文章: