Go依赖管理 | 青训营笔记

79 阅读1分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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         解释为什么需要依赖

image.png

version的两种类型:

  • 语义化版本
  • 基于commit伪版本

image.png

工具 go get

项目中执行go get命令可以下载依赖包,并且还可以指定下载的版本。

  • 运行go get -u将会升级到最新的次要版本或者修订版本(x.y.z, z是修订版本号, y是次要版本号)
  • 运行go get -u=patch将会升级到最新的修订版本
  • 运行go get package 将会升级到指定的版本号version 如果下载所有依赖可以使用go mod download命令。

image.png

四、小结

继续努力!继续消化!