这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天
我们在开发项目中,需要学会站在巨人的肩膀上,即利用已经封装好的、经过验证的开发组件或工具来提高研发效率。项目工程中会引入框架、日志等一系列依赖,因此对依赖包的管理就极其重要,本文将记录整理工程进阶课程中关于依赖管理的笔记。
- 依赖管理三要素
- 配置文件,描述依赖
- 中心仓库管理依赖库
- 本地工具
-
依赖配置-go.mod
-
go.mod
其中包括依赖管理基本单元、原生库、单元依赖。单元依赖中每个依赖单元的依赖标识结构为:[Module Path][Version/Pseudo-version]。
- version
分为语义化版本(${MAJOR}.${MINOR}.${PATCH})和基于commit伪版本(vX.0.0-yyyymmddhhmmss-abcdefgh1234)。
- indirect
indirect为后缀,放在依赖单元后面,表示go.mod对应的当前模块没有直接导入该依赖模块的包,即间接依赖。
- incompatible
对于没有go.mod文件并且主版本2+的依赖,将在版本号后加上+incompatible后缀
- 依赖分发-Go Proxy
Go Proxy是一个服务站点,能够缓存源站中的软件内容,且缓存的软件版本不会改变,在源站删除软件之后依然可用。
Go Modules通过GOPROXY环境变量控制如何使用Go Proxy。GOPROXY是一个Go Proxy站点URL列表,使用“direct”表示源站。
- 工具-go get/mod
go model有go get和go mod这两个工具
-
检测依赖:
go mod tidytidy会检测该文件夹目录下所有引入的依赖,写入 go.mod 文件 -
下载依赖:
go mod download -
导入依赖:go mod vendor
-
升级依赖:
升级 major 版本: go get -u github.com/xxx/xxx升级全部依赖的 minor 或 patch 版本: go get -u升级全部依赖的 patch 版本: go get -u=patch
-
新增依赖:
添加依赖 go get github.com/xxx/xxx添加指定版本: go get github.com/xxx/xxx@v1.6.2添加指定版本范围: go get github.com/xxxx/xxx@'<v1.6.2'添加指定commit的版本 git commit: go get github.com/xxxx/xxx@q2516faf3
总结工具中常用命令:
go mod init # 初始化go.mod
go mod tidy # 更新依赖文件
go mod download # 下载依赖文件
go mod vendor # 将依赖转移至本地的vendor文件
go mod edit # 手动修改依赖文件
go mod graph # 打印依赖图
go mod verify # 校验依赖
- 总结
Go依赖管理经过不断的演进,Go Module是目前广泛应用的Go语言依赖解决方案,它能够通过go.mod文件管理依赖包版本,通过GOPROXY设置Go模块代理,通过go get/mod指令工具管理依赖包。