依赖管理
①GOPATH:GOPATH 是 Go语言中使用的一个环境变量,它使用绝对路径提供项目的工作目录。
这个工作目录下有如下的文件夹:
bin-项目编译的二进制文件
pkg-项目编译的中间产物,加速编译
src-项目源码
项目代码直接依赖src下的代码,所以go get下载最新版本的包到src目录下。
这样会存在一个弊端:
场景:A和B依赖于某一packagel的不同版本。
问题:无法实现packagel的多版本控制
②所以就有了Go Vender
●项目目录下增加vendor文件,所有依赖包副本形式放在$ProjectRoot/vendor
●依赖寻址方式:vendor=>GOPATH
通过每个项目引入一份依赖的副本,解决了多个项目需要同一个package依赖的冲突问题。
但是又有了一个问题,一旦更新项目就可以出现依赖冲突
③最终,我们使用Go Moudle来进行依赖管理(1.6默认开启)
●通过go.mod文件管理依赖包版本
●通过go get/go mod指令工具管理依赖包
达成了我们的终极目标:定义版本规则和管理项目依赖关系
④依赖管理三要素:
1.配置文件,描述依赖
go.mod
2.中心仓库管理依赖库
Proxy
3.本地工具
go get/mod
⑤依赖配置-version
⑥依赖配置-indirect
A对C就是间接依赖,用indirect标识
⑦依赖配置 - incompatible
其中保证1.3和1.4是兼容版本(这里的最低应该是同时满足A和B兼容的版本的最低版本)
⑧依赖分发
⑨go工具