golang项目依赖管理工具go vendor,go mod

Posted Leo Han

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang项目依赖管理工具go vendor,go mod相关的知识,希望对你有一定的参考价值。

我们在进行golang项目编程的时候,一般会面临比较复杂的golang的依赖问题,可以通过go vendor或者go mod来解决

如果go get出错,在命令行进行如下设置:

go env -w GOPROXY=https://goproxy.cn,direct

首先下载govendor:

go get github.com/kardianos/govendor

下载完之后,到项目根目录下,执行初始化:

govendor init

govendor常用命令

命令描述
init初始换vendor目录
list列出项目所有的依赖包
add添加包到vendor目录下
update更新GOPATH依赖包到vendor目录
remove从vendor中删除依赖包
status列出所有包的状态:缺失、过期或更改过的包
fetch添加或者更新包到本地vendor目录
sync根据vendor.json去更新依赖包
get类似go get,拉取依赖包到vendor目录下

可以使用govendor fetch直接拉取源码下来:

govendor fetch github.com/go-gorm/gorm/

go mod必须是go 1.11版本及以上

先进行设置:

go env -w GOBIN=/Users/youdi/go/bin
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct // 使用七牛云的

go mod命令

命令说明
downloaddownload modules to local cache(下载依赖包)
editedit go.mod from tools or scripts(编辑go.mod)
graphprint module requirement graph (打印模块依赖图)
verifyinitialize new module in current directory(在当前目录初始化mod)
tidyadd missing and remove unused modules(拉取缺少的模块,移除不用的模块)
vendormake vendored copy of dependencies(将依赖复制到vendor下)
verifyverify dependencies have expected content (验证依赖是否正确)
whyexplain why packages or modules are needed(解释为什么需要依赖)

初始化项目:

// 进入到项目根目录,执行:
go mod init 
// 或者 go mod init 项目名称
```
然后可以使用`go get`拉取需要依赖的包即可,会自动在go.mod中生成记录



- go mod download 下载模块到本地缓存,缓存路径是 $GOPATH/pkg/mod/cache
- go mod edit 是提供了命令版编辑 go.mod 的功能,例如 go mod edit -fmt go.mod 会格式化 go.mod
- go mod graph 把模块之间的依赖图显示出来
- go mod init 初始化模块(例如把原本dep管理的依赖关系转换过来)
- go mod tidy 增加缺失的包,移除没用的包
- go mod vendor 把依赖拷贝到 vendor/ 目录下
- go mod verify 确认依赖关系
- go mod why 解释为什么需要包和模块
 

一般我们可以在导入别人的项目,或者修改了go.mod文件后通过:
```
go mod tidy
```
来初始化后者刷新项目的依赖

如果使用goland来开发,那么需要设置下go module和go proxy代理:
![在这里插入图片描述](https://img-blog.csdnimg.cn/dac0026f2b1f412d829cc9fa86c6eff5.png)




开发者涨薪指南 48位大咖的思考法则、工作方式、逻辑体系

以上是关于golang项目依赖管理工具go vendor,go mod的主要内容,如果未能解决你的问题,请参考以下文章

golang go get代理设置

go官方包依赖管理工具之mod

Go外部依赖包从vendor$GOPATH和$GOPATH/pkg/mod下的查找顺序

go官方包依赖管理工具之mod

依赖管理系统 go modules

记一次go module的坑