18|依赖管理:Go Module 用法与原理
郑建勋
你好,我是郑建勋。
由于项目一开始就需要涉及到依赖的管理,因此在下一节课正式书写项目代码前,我们先来看一看和依赖管理的一些重要知识。
我们知道,一个大型程序会引入大量必要的第三方库,这就让这个程序形成了复杂的依赖关系网络。这种复杂性可能引发一系列问题,例如依赖过多、多重依赖、依赖冲突、依赖回圈等。因此,需要有专门的工具对程序的依赖进行管理。
Go 语言中的依赖管理经历了长时间的演进过程。在 Go1.5 之前,Go 官方通过 GOPATH 对依赖进行管理。但是由于 GOPATH 存在诸多问题,社区和官方尝试了诸多新的依赖管理工具,中间出现的 Godep、Glide、Vendor 等工具都不如人意,最终笑到最后的是在 Go 1.11 后引入,并在 Go 1.13 之后成为 Go 依赖管理主流的 Go Modules。
让我们先来看看 GOPATH 和它的不足之处。
GOPATH
什么是 GOPATH?
在 Go 1.8 及以上版本中,如果用户不指定 GOPATH,GOPATH 的路径就是默认的。我们可以通过输入 go env 或者 go env gopath 查看 GOPATH 的具体配置:
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文介绍了Go Modules的使用方法和原理,以及其在解决依赖管理方面的优势。通过最小版本选择原理(MVS),Go Modules能够处理版本依赖问题并自动选择最兼容的依赖版本,同时还可以在本地管理依赖项并自定义依赖项。文章详细介绍了Go Modules的操作方法,包括初始化模块、引入第三方模块、下载第三方模块、使用第三方模块、手动更新第三方模块等。此外,还介绍了Go Modules中的其他功能,如`replace`、`exclude`、`retract`指令的使用,以及依赖移除的操作。通过实例验证了不同版本模块的共存性,并解释了伪版本的概念。最后,作者提出了一个思考题,邀请读者讨论如何解决Go项目常常遇到的循环依赖问题。整体而言,本文内容详实,对于想要了解Go Modules的读者来说是一份很好的参考资料。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Go 进阶 · 分布式爬虫实战》,新⼈⾸单¥68
《Go 进阶 · 分布式爬虫实战》,新⼈⾸单¥68
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(9)
- 最新
- 精选
- shuff1e能不能上github的项目代码链接?
作者回复: https://github.com/dreamerjackson/crawler,注意看文中指明的tag分支
2022-11-20归属地:北京31 - 风铃主要是现在大家都习惯了快速上手,突然间讲了这么多理论还没有开始编码,大家就不太理解了,老师最好的有一个大纲展示。2022-11-20归属地:浙江4
- cczywyc和Java不同,go编译器不允许循环依赖(编译不会通过)。避免循环依赖就需要一个好的项目结构设计,我目前在开发过程中,会根据业务功能划分模块,设计良好的项目结构,组织好不同包之前的关系,避免循环依赖。2022-11-23归属地:浙江3
- 一打七想咨询一下老师,对于伪版本的依赖,每次执行 go mod tidy 时,伪版本都会更新成最新的 commit 吗2024-01-08归属地:北京
- 列奥纳多是勇者看了十章多理论,感觉有点没劲就没看了,现在积到47章然后再看hh2023-01-27归属地:浙江
- 徐石头我觉得最关键的是分清楚每一层的功能和依赖关系,在拆分微服务的时候也是这样,循环依赖都是因为每层的作用没有梳理清楚,如果实在要依赖,就把依赖部分代码拆的更细,不调用业务方法,而是调用底层的存储或者第三方包,少量的重复代码没关系2022-11-21归属地:湖南
- Geek_crazydaddy好菜不怕晚,老师还是按自己的节奏来啊,道与术都很重要啊,甚至有些时候不知道“道”,“术”理解起来就很难,而且知识很难一次就理解透彻,前面说了原理后面代码遇到不懂的地方回头对着看肯定比自己百度谷歌有效率啊,至于循环依赖,个人感觉大部分是由于项目结构或者代码只能不够明确导致的,小面积循环可以复制一份,大面积的就要考虑下项目结构了2022-11-21归属地:江苏
- 奕Go 项目中如果存在循环依赖,编译器是不允许通过的2022-11-19归属地:广东
- Jack打卡2022-11-19归属地:广东
收起评论