依赖管理 | 青训营

110 阅读1分钟

今天学习下一节内容:依赖管理。由于工程项目不可能基于标准库0~1编码搭建,所以要管理依赖库。 GOPATH->GO Vendor->Go Module *不同环境依赖的版本不同 *控制依赖库的版本 1.GOPATH -环境变量$GOPATH -项目代码直接依赖src下的代码 -go get下载最新版本的包到src目录下

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

2.Go vendor *项目目录下增加vendor文件,所有依赖包副本形式放在¥ProjectRoot/vender *依赖寻址方式:vendor->GOPATH

通过每个项目引入的一份函数依赖的副本,解决了多个项目需要一个package依赖的冲突问题。

弊端: 1.无法控制依赖的版本。 2.更新项目又可能出现依赖冲突,导致编译出错

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

终极目标:定义版本规则和管理项目依赖关系

依赖管理三要素: 1.配置文件,描述依赖 go.mod

2中心仓库管理依赖库 Proxy

3.本地工具 go get/mod

1.依赖配置-version 语义化版本 MAJOR..{MAJOR}..{PATCH} V1.3.0 V2.3.0

基于commit伪版本 vX.0.0-yyyymmddhhmmss-abcdefgh1234 v0.0.0-20220401081311-c38fb593267b v1.0.0-20201130134442-10cb98267c6c

A->B->C[*A->直接依赖 *A->C间接依赖

依赖配置-incompatible

*主版本2+模块会在模块路径增加/vN后缀 *对于没有go.mod文件并且主版本2+的依赖,会+incomatible

依赖分发-回源 *无法保证构建的稳定性 增加/修改/删除软件版本

*无法保证依赖可用性 删除软件

*增加第三方压力 代码托管平台负载问题

依赖分发-变量GOPROXY GOPROXY="proxy1.cn,https://proxy2.cn,…" 服务站点URL列表,“direct”表示源站

工具-go-get go get example.org/pkg -> @update 默认 @none 删除依赖 @v.1.1.2 tag版本,语义版本 @23dfdd5 特定的commit @master 分支最新的commit

工具-go mod go mod -> init 初始化,创建go.mod文件 downlo 下载模块到本地缓存 tidy 增加需要的依赖,删除不需要的依赖