Golang从入门到进阶系列:Go Modules机制

Go Modules机制是Go官方的包管理机制,从Go 1.11开始作为experiment feature引入,GO111MODULE是这个特性的开关。

GO111MODULE

GO111MODULE有三个值:autoonoff,默认值为autoGO111MODULE的值会影响Go compiler的依赖管理模式

  • off:go compiler会始终使用GOPATH mode,无论要构建的源码目录是否在GOPATH路径下,go compiler都会在传统GOPATHvendor目录下,搜索目标程序依赖的go package
  • on:go compiler会始终使用module-aware mode,无论要构建的源码是否位于GOPATH路径下,go compiler都会在go mod命令的缓存目录$GOPATH/pkg/mod下搜索对应版本的依赖package
  • auto:使用GOPATH mode还是module-aware mode,取决于要构建的源码目录是否位于$GOPATH/src为根的目录体系下,且是否包含go.mod文件

go mod命令

golang使用go mod命令来实现包的管理

go mod命令说明:

命令 说明
download download modules to local cache
edit edit go.mod from tools or scripts
graph print module requirement graph(打印模块依赖图)
init initialize new module in current directory
tidy add missing and remove unused module
vendor make vendored copy of dependencies
verify verify dependencies have expected content
why explain why packages or modules are needed

go mod命令使用:

  1. 执行命令go mod init,会在当前目录下生成一个go.mod文件。执行这条命令之前,但其那目录如果已经存在go.mod文件,需要先删除
  2. 如果生成的go mod文件不完整,则继续执行go mod tidy命令,它会添加缺失的模块以及移除不需要的模块,执行后会生成go.sum文件
  3. 执行go mod verify来检查当前模块的依赖是否全部都下载完毕,以及下载之后是否被修改,如果依赖没有问题,则会打印all modules verified
  4. 执行命令go mod vendor生成vendor目录,该目录下存放的是go.mod文件描述的依赖包,以及一个modules.txt

go mod相关文件

执行命令go mod init以及go mod tidy之后,会生成两个文件,分别为:

  • go.mod:包含模块名称、go的版本、该模块的依赖信息
  • go.sum:模块所有依赖的校验和

发表评论

您的电子邮箱地址不会被公开。