Go语言入门-工程实践
02.依赖管理
02.背景
2.1 Go依赖管理演进
GOPATH > GO Vendor > Go Module
2.1.1 GOPATH
- 环境变量 $GOPATH
- bin:项目编译的二进制文件
- pkg:项目编译的中间产物,加速编译
- src:项目编码
- 项目代码直接依赖src下的代码。
- go get下载最新版本的包到src目录下。
2.1.1 GOPATH-弊端
- 场景:A和B依赖于某一package的不同版本。
- 问题:无法实现package的多版本控制。
2.1.2 Go Vendor
- 项目目录下载增加vendor文件,所有依赖包副本形式放在$ProjectRoot/vendor.
- 依赖寻址方式:vendor=>GOPATH
通过每个项目引入一份依赖的副本,解决了多个项目需要同一个package依赖的冲突问题。
2.1.2 Go Vendor-弊端
问题:
- 通过go.mod文件管理依赖包版本
- 通过go get/go mod指令工具管理依赖包
2.2 依赖管理三要素
2.3.1 依赖配置-go.mod
- 依赖管理基本单元
- 原生库
- 单元依赖
依赖标识:[Moudle Path][Version/Pseudo-version]
2.3.2 依赖配置-version
- 语义化版本
- 基于commit伪版本
2.3.3 依赖配置-incompatible
- 主版本2+模板会在模块路径增加/vN后缀。
- 对于没有go.mod文件并且主版本2+的依赖,会+incompatible.
2.3.4 依赖配置-依赖图
2.3.5 依赖分发-回源
- 无法保证构建稳定性 : 增加/修改/删除软件版本
- 无法保证依赖可用性 :删除软件
- 增加第三方压力 :代码托管平台负载问题
2.3.6 依赖分发-变量 GOPROXY
2.3.7 工具-go get
go get example.org/pkg:
- @update: 默认
- @none: 删除依赖
- @v1.1.2: tag版本,语义版本
- @23dfdd5: 特定的commit
- @master : 分支的最新commit
2.3.8 工具-go mod
- init : 初始化,创建go.mod文件
- download : 下载模块到本地缓存
- tidy : 增加需要的依赖,删除不需要的依赖
02.依赖管理三要素
总结
一些对于Day2学习的Go语言依赖管理具体笔记内容记录,主要是Go依赖管理的演进进程和go mod使用的详细讲述,对go mod有整体使用上的概念。