go vendor的用法

Posted

tags:

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

参考技术A 使用go很长时间后才整明白vendor的用法为啥这么坑人。

注意

这和当前工作路径相关:

go module和vendor是两个冲突的设计,二者只能选一,不可混用。

如果从vendor到module迁移的怎么办:
-mod=vendor

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代理:

以上是关于go vendor的用法的主要内容,如果未能解决你的问题,请参考以下文章

Go包管理工具Vendor使用

go vendor目录

golang vendor

go mod

go mod 生成 vendor

让vscode完美支持go vendor的代码跳转(使用vscode必看)