依赖管理 | 青训营笔记

94 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天

我们在开发项目中,需要学会站在巨人的肩膀上,即利用已经封装好的、经过验证的开发组件或工具来提高研发效率。项目工程中会引入框架、日志等一系列依赖,因此对依赖包的管理就极其重要,本文将记录整理工程进阶课程中关于依赖管理的笔记。

  • 依赖管理三要素
  1. 配置文件,描述依赖
  2. 中心仓库管理依赖库
  3. 本地工具
  • 依赖配置-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 getgo 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指令工具管理依赖包。