Go Modules包管理
Go Modules是Go依赖解决的方案,发布于go1.11, 是官方推荐使用的方案.
为什么使用Go Modules
原来包管理方式
在Go Modules之前,项目采用的是GOPATH
模式,GOPATH是布置Go开发环境时设置的一个环境变量。
我们需要将Go的项目代码,存放在GOPATH目录的src文件夹下。
go get
获取三方依赖也会自动下载到GOPATH/src下, 而且没有选择性,默认会下载最新版本的包。会出现多个项目依赖于不同版本的三方包不兼容的情况
第三方包没有版本的概念,若作者做了不兼容升级,则会影响本地的代码
使用Go Mod解决的问题
自动下载相关依赖包
项目可以存放在其他位置,不用统一放在$GOPATH/src下
项目内会生成一个go.mod
文件,罗列出相关的依赖。 类似于package.json
三方包会指明相关版本,可以实现不同版本的依赖
对于已经转移的包,可以用replace
替换
配置
使用go env
查看相关环境变量,修改GO111MODULE
和GOPROXY
环境变量
1 | # 打开go mod 模式 默认是 auto |
go mod命令使用
go mod init
:初始化go mod, 生成go.mod文件,后可接参数指定 module 名,上面已经演示过。go mod download
:手动触发下载依赖包到本地cache(默认为$GOPATH/pkg/mod目录)go mod graph
:打印项目的模块依赖结构go mod tidy
:添加缺少的包,且删除无用的包go mod verify
:校验模块是否被篡改过go mod why
:查看为什么需要依赖go mod vendor
:导出项目所有依赖到vendor下
解释
- vendor是项目缓存,为了防止开源代码项目被删除无法引用下载,会使用vendor来做缓存管理,它是独立的,你可以手动管理引用的包,代码包查找的顺序是向上冒泡
1 | 包同目录下的vendor |
go mod 只是一个依赖包版本管理工具,包的查找顺序还是一样的,使用mod就不用把代码都放到src下来管理,可以根据go.mod文件中记录的版本来索引
关于三方包删除的问题,官方没有相关删除的命令。若要删除,需要手动删除相关包。这样做,可能是因为项目中所有需要的三方包都保存在$GOPATH下,不同的项目之前可能有依赖,所以不能随便删除。
- 标题: Go Modules包管理
- 作者: Yaurora
- 创建于 : 2023-03-14 10:31:36
- 更新于 : 2023-03-19 21:17:38
- 链接: https://jingyu.life/2023/03/14/go/go-module/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。