Go Module 的版本管理文件

go.mod 文件

go.mod 文件中记录了当前项目中所有依赖包的相关信息,声明依赖的格式如下:

require module/path v1.2.3

// require:声明依赖的关键字
// module/path:依赖包的引入路径
// v1.2.3:依赖包的版本号。支持以下几种格式:
   // latest:最新版本
   // v1.0.0:详细版本号
   // commit hash:指定某次commit hash

引入某些没有发布过 tag 版本标识的依赖包时,go.mod 中记录的依赖版本信息就会出现类似 v0.0.0-20210218074646-139b0bcd549d 的格式,由版本号、commit 时间和 commit 的 hash 值组成


go.sum 文件

用go module下载了依赖后,项目目录下还会生成一个go.sum文件,这个文件中详细记录了当前项目中引入的依赖包的信息及其hash 值。go.sum文件内容通常是以类似下面的格式出现

<module> <version>/go.mod <hash>

或

<module> <version> <hash>
<module> <version>/go.mod <hash>

不同于其他语言提供的基于中心的包管理机制,例如 npm,Go 并没有提供一个中央仓库来管理所有依赖包,而是采用分布式的方式来管理包。为了防止依赖包被非法篡改,Go module 引入了go.sum 机制来对依赖包进行校验


依赖保存的位置

Go module 会把下载到本地的依赖包会以类似下面的形式保存在 $GOPATH/pkg/mod 目录下,每个依赖包都会带有版本号进行区分,这样就允许在本地存在同一个包的多个不同版本

mod
├── cache
├── cloud.google.com
├── github.com
    	└──q1mi
          ├── hello@v0.0.0-20210218074646-139b0bcd549d
          ├── hello@v0.1.1
          └── hello@v0.1.0
...

如果想清除所有本地已缓存的依赖包数据,可以执行 go clean -modcache 命令