文章目录
GoLang之go module
注:该版本是以Go SDK v1.17进行讲解
1.go module依赖管理介绍
2.GO111MODULE环境变量
3.GOPROXY环境变量
4.使用go module方法
5.go mod命令
6.go get命令
7.go.mod里//indirect
间接依赖:后面的// indirect,它表示这是一个间接依赖,间接依赖是指在当前module中没有直接import,而被当前module使用的第三方module引入的包
顶层依赖:当前module中被直接import的包
8.go.mod灰色时
表示未被引用
8.go.sum文件介绍
go.sum是一个构建状态跟踪文件。它会记录当前module所有的顶层和间接依赖,以及这些依赖的校验和,从而提供一个可以100%复现的构建过程并对构建对象提供安全性的保证。
go.sum同时还会保留过去使用的包的版本信息,以便日后可能的版本回退,这一点也与普通的锁文件不同。所以go.sum并不是包管理器的锁文件。
因此我们应该把go.sum和go.mod一同添加进版本控制工具的跟踪列表,同时需要随着你的模块一起发布。如果你发布的模块中不包含此文件,使用者在构建时会报错,同时还可能出现安全风险(go.sum提供了安全性的校验)
9.go list -m all
10.go list -m -versions github.com/gin-gonic/gin
列出的是当前电脑上依赖版本的之前版本,不是市面上存在的所有的版本号
11.指定依赖版本下载
go get github.com/gin-gonic/gin@v1.1.4
12.go mod tidy
go mod tidy 会自动清理掉不需要的依赖项,同时进行导入依赖或者下载依赖(先在在本地找,找不到的话就会进行下载)
注:go build也会整理并更新go.mod文件
13.修改go.mod里依赖版本
14.go vendor
Go 1.5引入了vendor 机制,但是需要手动设置环境变量 GO15VENDOREXPERIMENT= 1,Go编译器才能启用。从Go1.6起,,默认开启 vendor 目录查找,vendor 机制就是在包中引入 vendor 目录,将依赖的外部包复制到 vendor 目录下,编译器在查找外部依赖包时,优先在 vendor 目录下查找。整个查找第三方包的流程如下:
1)如果当前包下有vendor目录,则从其下查找第三方的包,如果没有找到,则继续执行下一步操作。
如果当前包目录下没有vendor目录,则沿当前包目录向上逐级目录查找vendor目录, ,直到找到 $GOPATH/src下的vendor目录,只要找到vendor目录就去其下查找第三方的包,如果没有则继续执行下一步操作。
2)在GOPATH下面查找依赖包。
3)在GOROOT目录下面查找依赖包。
优点:vendor将原来放在$GOPATH/src的第三方包放到当前工程的vendor目录中进行管理。它为工程独立的管理自己所依赖第三方包提供了保证,多个工程独立地管理自己的第三方依赖包,它们之间不会相互影响。 vendor将原来包共享模式转换为每个工程独立维护的模式, vendor的另一个好处是保证了工程目录下代码的完整性,将工程代码复制到其他Go编译环境,不需要再去下载第三方包,直接就能编译,这种隔离和解耦的设计思路是一大进步。
golang一直提供了工具选择上的自由性,如果你不喜欢go mod的缓存方式,你可以使用go mod vendor
回到godep
或govendor
使用的vendor
目录进行包管理的方式。
当然这个命令并不能让你从godep之类的工具迁移到go modules,它只是单纯地把go.sum中的所有依赖下载到vendor目录里,如果你用它迁移godep你会发现vendor目录里的包回合godep指定的产生相当大的差异,所以请务必不要这样做。
删除vendor文件夹即可进行取消吧vendor模式