不积跬步,无以至千里

golang依赖管理之gomod


golang 1.12 开始使用 go module 来管理依赖,go module 相比 go vendor 来说,有以下几点改进

  1. 使用版本仓库来管理依赖,本地的所有项目的依赖统一放在 gopkg 文件夹下
  2. 项目中不需要包括所有依赖包的源码,所有依赖包名称和版本号记录在 go.module 文件中,系统编译时,按照 go.module 中指定的包名和版本到 pkg 目录下寻找依赖包,如果不存在的话,从远程仓库中下载.

当然,如果使用过 java 的 maven 的话,对 go module 应该会感觉很亲切.

go mod 使用

go mod 初始化:go mod init 初始化后,执行go mod tidy,go module 会自动寻找项目依赖包,默认会获取各个依赖包的最新版本

go.mod 文件内容分析 go.mod 文件包括四个部分:module,require,replace,exclude modulerequired是一定会包含的,分别表示当前项目的包名,其他项目如果依赖了本项目,将会使用module定义的包名作为前缀,以及当前项目所必须的依赖包 replaceexclude用在外部系统依赖了本项目模块的情况下,replace会在外部系统对本项目模块做依赖打包的时候,使用replace指定的包名前缀,exclude则会在外部项目对本依赖打包的时候忽略指定的包名前缀

go buildgo tidy

go.sum文件包含了所有引用过的包以及加密后的 checksum,用来对引用的包做验证

go get 使用

在开启了 gomod 后,- [ ]. todo go mod 使用go mod tidy命令时,go mod 会自动查找当前项目的所有直接和间接依赖,并将最新的版本添加到 go.mod 和 go.sum 文件中,但有时候我们还需要指定某个版本号引入,这时候可以直接修改go.mod文件,指定版本号,也可以使用go get命令来指定版本号 go get [-d][-f] [-t][-u] [-v][-fix] [-insecure][build flags] [packages] 如:go get a.b.c@v1.0.0 go get a.b.c@branch_1

实战

参考:https://github.com/golang/go/wiki/Modules