Go 依赖管理

Go Module

Go在版本1.11之前有其他的一些依赖管理工具,如:

  • govendor
  • dep
  • godep
  • golide

这些依赖管理工具查找依赖都是基于GOPATH,GOROOT或者vendor目录,并且项目代码也只能在GOPATH/src目录下面,为了解决强依赖于GOPATH的问题,Go开发了新的依赖管理工具:Go Module

Go Module解决依赖管理问题

Go module是从go-1.11推出的依赖管理项目,在v-1.11版本的时候Go mod还只是可选的,通过如下方式启用或禁用:

  • 设置环境变量:GO111MODULE = off,项目会禁用go module功能,默认还是会用其他的工具管理依赖
  • 设置环境变量:GO111MODULE = on,项目会启用go module功能,查找依赖会从当前模块的go module下查找,如果查找失败,也不会去到GOPATH或者vendor中查找依赖了
  • 设置环境变量:GO111MODULE = auto,这是默认值。这表示如果项目下存在go.mod文件并且项目不在GOPATH/src目录下,那么就会使用go module功能,否则就会禁用go module功能
注:用go module管理的项目不能在GOPATH目录下,否则就会使用其他项目中已有的包管理工具管理依赖

Go Module的使用

go init
mkdir go_pro && cd go_pro
go mod init go_pro

完成上述操作之后,就会在当前目录下生成一个go.mod文件,这个文件中的结构如下:

//module 后面是当前项目的模块名称,一般与项目名称相同,但也可以不同
//例如:如果你想将你的项目push到github上,让别人通过go get的方式引用,那么此处可以用如下:
//module github.com/YouRepoName
module go_pro

//预设的go版本
go 1.13

//用于将一个模块版本替换成另一个模块版本,前提是当前模块为主模块时,例如:
replace k8s.io/api => k8s.io/api v0.0.0-20190918155943-95b840bb6a1f

//也可以用于引入本地的其他模块到当前这个模块中,例如:
replace ecm-sdk-go => ./vendor/go-util

//当前项目中的依赖列表
require (
    github.com/go-git/go-git/v5 v5.1.0
)

//当前项目中禁止依赖包列表
exclude (
    github.com/go-git/go-git/v5 v5.1.0
)
go module命令
  • go mod tidy:添加丢失的依赖,删除不用的依赖
  • go mod download:下载go.mod中的依赖到本地缓存,目前所有模块版本数据均缓存在$GOPATH/pkg/mod​$GOPATH/pkg/sum 下,也可以指定cache位置
  • go mod graph:显示模块依赖图
  • go mod vendor:复制依赖到vendor目录下
  • go mod verify:根据go.sum文件校验依赖
  • go mod why:解释为什么要依赖
  • go list m -json all:依赖详情
  • go list m -versions github.com/gin-gonic/gin:查看gin所有的历史版本
  • go mod edit -require="github.com/gin-gonic/gin@v1.3.0:更换依赖版本,执行完之后要执行:go mod tidy,也可以直接改go.mod文件
  • go clean -modcache:清理所有已经缓存的模块版本数据
go get命令
  • go get packageName:安装依赖
  • go get -u packageName:将依赖升级到最新的次要版本或修订版本
  • go get -u=patch packageName:将依赖升级到最新的修订版本
  • go get package@version:升级到指定的版本
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容