这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天
一、本堂课重点内容:
并发深入 依赖管理
-
Gopath
-
Go Vendor
-
Go Module
二、并发编程
三、依赖管理
发展历史
GOPATH模式
是一个环境变量,其中有三个部分:
- bin:项目编译的二进制文件 可执行程序
- pkg:项目编译的中间产物,加速编译
- src:项目源码,
运行方式:其它 GOPATH/src 目录下的工程引用 在 $GOPATH/src下进行 .go 文件或源代码的存储,我们可以称其为 GOPATH 的模式
缺点有以下两点:没有版本控制的概念;以及所有项目都要放在$GOPATH/src目录下,不在当前目录则不能编译
Go Vender
原理是本地化构建
项目目录下增加vender文件,所有依赖包副本形式放在$ProjectRoot/vender
(依赖寻址方式:vender -> GOPATH)
通过每个项目引入一份依赖的副本,解决了多个项目需要同一个package依赖的冲突问题。
缺点是:放弃了依赖重用,使得冗余度上升;无法控制依赖的版本。
Go Module
(1.16以后默认开启)
- 通过
go.mod文件管理依赖包版本 - 通过
go get/go mod指令工具管理依赖包 - 工程不用全放在
gopath/src目录下 - 定义版本规则和管理项目依赖关系
终极目标:定义版本规则和管理项目依赖关系
依赖管理的三要素
- 配置文件,描述依赖——
go.mod - 中心仓库管理依赖库——
Proxy - 本地工具——
go get/mod
go.mod
-
go mod download 下载依赖的module到本地cache(默认为$GOPATH/pkg/mod目录)
-
go mod edit 编辑
-
go.mod文件
-
go mod graph 打印模块依赖图
-
go mod init 初始化当前文件夹, 创建go.mod文件
-
go mod tidy 增加缺少的module,删除无用的module
-
go mod vendor 将依赖复制到vendor下
-
go mod verify 校验依赖
-
go mod why 解释为什么需要依赖
version的两种类型:
- 语义化版本
- 基于commit伪版本
工具 go get
项目中执行go get命令可以下载依赖包,并且还可以指定下载的版本。
- 运行go get -u将会升级到最新的次要版本或者修订版本(x.y.z, z是修订版本号, y是次要版本号)
- 运行go get -u=patch将会升级到最新的修订版本
- 运行go get package 将会升级到指定的版本号version 如果下载所有依赖可以使用go mod download命令。
四、小结
继续努力!继续消化!