go依赖管理

75 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天

go语言进阶、依赖管理、项目实战(中)——依赖管理

依赖管理

在实际工程开发中,一个重要概念就是依赖管理,这一章我们主要讲解go的依赖管理,主要涉及go依赖管理的演进路线和go module实践。

依赖指各种开发包,我们在开发项目中,需要学会站在巨人的肩膀上,也就是利用已经封装好的、经过验证的开发组件或工具来提升自己的研发效率。

image.png

对于hello world及类似的单体函数只需要依赖原生SDK,而实际工程会街复杂,我们不可能基于标准的0~1编码搭建,而更多的关注业务逻辑的实现,而其他的涉及框架、日志、driver、以及collection等一系列依赖都会通过sdk的方式引入,这样对依赖包的管理就尤为重要。

image.png 而Go的依赖管理主要经历了3个阶段,分别是gopath、go vender、到目前被广泛应用的go module,整个演进路线主要围绕实现两个目标来迭代发展的,分别是1,2。

image.png

下面我们————进行讲解,首先是GOPATH。 GOPATH是Go语言支持的一个环境变量,value是Go项目的工作区。 目录有以下结构: src:存放Go项目的源码;pkg:存放编译的中间产物,加快编译速度; bin:存放Go项目编译生成的二进制文件。

image.png GOPATH的弊端:

场景:A和B依赖于某一package的不同版本。 产生的问题:无法实现package的多版本控制

image.png

  • 项目目录下增加vendor 文件,所有依赖包副本形式放在$ProjectRoot/vendor
  • 依赖寻址方式: vendor => GOPATH
  • 通过每个项目引入一份依赖的副本,解决了多个项目需要同一个 package依赖的冲突问题。

GO Vender-弊端:

image.png

  • 无法控制版本
  • 更新项目又可能出现依赖冲突,导致编译出错。

Go Module

  • 通过go.mod文件管理依赖包版本
  • 通过go get/go mod指令工具管理依赖包

image.png 依赖管理三要素

1.配置文件,描述依赖  go.mod

2.中心仓库管理依赖库  proxy

3.本地工具  go get/mod

依赖配置-go.mod

image.png

依赖配置-indirect

image.png

image.png

依赖配置-incompatible

image.png