转载

Go 语言依赖管理的趋势:Go Module 以及 Go 仓库

关注世界领先 DevOps 平台 JFrog

Go 语言依赖管理的趋势:Go Module 以及 Go 仓库

在 JFrog 的 2019 用户大会上,来自微软的高级布道师同时也是开源 Go 依赖管理项目Athens (https://github.com/gomods/athens)的核心贡献者Aaron Schlesinger 为大家介绍了 Go Module 和 Go 的依赖管理的未来趋势。

1. Go 语言依赖管理的痛点

Go 诞生于云原生应用,非常适用于高并发的云原生环境。 但Go 语言在包管理这块备受诟病。

Go 语言依赖管理的趋势:Go Module 以及 Go 仓库

不像 Maven,NPM,Docker,这些语言有成熟的依赖管理工具,而 Go 没有。

2. Go 语言依赖管理的历史

· GOPATH

最早的解决Go 依赖问题的工具是 GOPATH。

Go 语言依赖管理的趋势:Go Module 以及 Go 仓库

GOPATH 解决了第三方源码依赖的问题,用户比较容易的能够引用一个 Github 上的第三方代码库,进行打包构建。 但这引入了一个问题,所有的团队依赖的只互联网上的一份源代码,如果这个代码库被人篡改,删除,你们的构建也会受到影响。 为了解决这个问题,社区里提出了 Go Vendoring 的方法。

· Go Vendoring

和 GOPATH 不一样,Go vendoring将第三方依赖的源码下载到本地,并且 checkin 到自己的代码库里进行管理,这就屏蔽的第三方源被修改的风险,同时代码在自己的代码库里管理也比较安全。

Go 语言依赖管理的趋势:Go Module 以及 Go 仓库

但这又引入了新的问题,随着项目的依赖增多,你的代码库可能会越来越大,例如上图,你依赖了 mypkg@v1.2.3, 这个库里有几百兆的图片,当你依赖了这个库,在 pull 代码的时候就大大增加的你的代码库大小。

3. Athens – Go 依赖管理工具

Go 语言依赖管理的趋势:Go Module 以及 Go 仓库

Anthens 是 Go 社区的一个开源依赖管理工具,它能够聚合管理依赖包。 能够对接 github,JFrog GoCenter,JFrog Artifactory。 所以你只需要标注你所有的依赖包的地址,go get 会安装先近后远的顺序帮你下载依赖,并且缓存在本地 mods 目录。 使用 Athens 很简单,它可以在本地运行:

Go 语言依赖管理的趋势:Go Module 以及 Go 仓库

用 Docker 启动 Athens 服务之后,监听 3000 端口。 在 GoProxy 里设置代理地址:

Go 语言依赖管理的趋势:Go Module 以及 Go 仓库

设置好之后,执行 Go build,就能够让 Athens 从 GoCenter 进行依赖包的下载了。 当然 Athens 也能够从 Artifactory 进行 Go 依赖包的下载。

构建完成之后,通过JFrog CLI 进行 Go Build,上传 go module 到 Artifactory 里,还能够享受到依赖关系的记录。

Go 语言依赖管理的趋势:Go Module 以及 Go 仓库

这样你在进行 Go 依赖梳理时,会无比的清晰,不会出现依赖管理混乱,依赖黑洞的情况。

同时也能展示反向依赖视图,来梳理第三方组件在公司内部的使用情况,对应 Go 的包管理来说是神器了。

Go 语言依赖管理的趋势:Go Module 以及 Go 仓库

4. 补充: Go Module 中央仓库 GoCenter.io

Go 语言依赖管理的趋势:Go Module 以及 Go 仓库

GoCenter 是由 JFrog 提供并维护的 Go 依赖组件公有仓库,类似于 JCenter,为 Go 开发者提供第三方依赖下载。 举例: 如果开发者需要下载 apache thrift 包,可以在 Gocenter.io网站里进行搜索 thrift,然后会得到搜索结果:

Go 语言依赖管理的趋势:Go Module 以及 Go 仓库

在项目的 go.mod文件里指定这个地址,在 go 构建的时候就会从 GoCenter 下载这个依赖的压缩包。

Go 语言依赖管理的趋势:Go Module 以及 Go 仓库

注意这里下载的是 zip 包,不是多次下载源文件。 下载完成后会按照版本号存放在本地作为缓存,共享给团队其他人员构建使用。

Go 语言依赖管理的趋势:Go Module 以及 Go 仓库

5. 总结

Go 社区经历了近十年的发展,从 GOPATH,到 Go Vendoring,再到 Go module 进行持续演进,依赖管理的部分正在往 Go Module 这个方面发展,和其他语言一致。 JFrog 提供了公网免费的 GoCenter 的下载服务,欢迎大家使用,同时 JFrog Artifactory 也实现了本地 Go 仓库的功能,解决您 Go 依赖的所有问题。

联系我们

info@jfrogchina.com

Go 语言依赖管理的趋势:Go Module 以及 Go 仓库

长按二维码关注

Go 语言依赖管理的趋势:Go Module 以及 Go 仓库

Go 语言依赖管理的趋势:Go Module 以及 Go 仓库

点击“阅读原文” 进入 JFrog 官网

Go 语言依赖管理的趋势:Go Module 以及 Go 仓库

原文  https://mp.weixin.qq.com/s/NNUrVC6XFfUinshw5_4ehQ
正文到此结束
Loading...