Go 包管理工具 govendor 使用指南

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: govendor 是 go 语言依赖管理工具。

govendor 是 go 语言依赖管理工具。


安装及初始化


安装:


go get -u -v github.com/kardianos/govendor
复制代码


初始化:


# Setup your project.
cd "my project in GOPATH"
govendor init
# Add existing GOPATH files to vendor.
govendor add +external
复制代码


下载依赖包


下面介绍三个命令:

  • govendor fetch:不但可以下载自身的包,还可以下载依赖。
  • govendor get:如官网所述 Like "go get" but copies dependencies into a "vendor" folder,实际上只复制了依赖包进到 vendor 目录而已。
  • govendor add:Add packages from $GOPATH,意思是从本地加载依赖包。


综上,如果是下载依赖包,一定是用 govendor fetch


govendor fetch github.com/gin-gonic/gin@v1.2 # 只拷贝 gin/ 目录的内容,而不包含其子目录
govendor fetch github.com/gin-gonic/gin/...@v1.2 # 可以得到 gin/ 目录,及其所有子目录
复制代码


@v1.2 表示使用 v1.2 版本,其实就是 git tag 为 v1.2 的 revision,这个功能很实用。

再说一个可能会碰到的问题,有时候我们使用第三方依赖包,而且还有 bug,修复之后,期望使用自己仓库的时候,可以这样做:


govendor get 'github.com/go-sql-driver/mysql::github.com/yongxinz/go-mysql'
复制代码


原仓库的 github.com/go-sql-driver/mysql 存在一个小问题,此时期望使用自己修复过的 github.com/yongxinz/go-mysql


版本管理


不要将整个 vendor/ 目录的内容都提到 git 仓库,只提交 vendor/vendor.json 文件就可以了。

当我们拉代码之后,需要安装依赖包时,只需要执行下面这条命令就可以了。


govendor sync
复制代码


.gitignore 文件,重点在最后两行:


# Created by https://www.gitignore.io/api/go
### Go ###
# Binaries for programs and plugins
*.exe
*.exe~
*.dll
*.so
*.dylib
# Test binary, build with `go test -c`
*.test
# Output of the go coverage tool, specifically when used with LiteIDE
*.out
### Go Patch ###
/vendor/
!/vendor/vendor.json
复制代码


所以,一般的开发流程可以这样来做:如果是新建项目,先安装 govendor 并初始化,然后通过 govendor 来安装依赖包;如果是已有项目,先从版本库拉下来,然后安装 govendor,再执行同步命令即可。


其他命令


govendor status: 查看当前包状态

govendor list +e: 查看当前项目的依赖但是未被添加到 vendor 中的包

govendor add +e: 添加依赖的包。如果 vendor.json 中存在,但是 vendor 目录下不存在(即 govendor status 显示缺失)的包也会被重新添加

govendor remove +u: 删除在 vendor 下但是未依赖的包

在实际过程中,有部分包是团队的公共包。 这部分包通常有自己的单独项目,并且已经被我们添加到 $GOPATH 下,可能就不需要添加到当前项目的 vendor 下。

这时候可以结合 listadd 来使用, 先用 list -no-status +e 列出依赖包,然后使用 grep 过滤,再调用 add 命令添加:


govendor list -no-status +e | grep -v 'myteam/common' | xargs govendor add


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
30天前
|
Linux Go iOS开发
怎么禁用 vscode 中点击 go 包名时自动打开浏览器跳转到 pkg.go.dev
本文介绍了如何在 VSCode 中禁用点击 Go 包名时自动打开浏览器跳转到 pkg.go.dev 的功能。通过将 gopls 的 `ui.navigation.importShortcut` 设置为 "Definition",可以实现仅跳转到定义处而不打开链接。具体操作步骤包括:打开设置、搜索 gopls、编辑 settings.json 文件并保存更改,最后重启 VSCode 使设置生效。
49 7
怎么禁用 vscode 中点击 go 包名时自动打开浏览器跳转到 pkg.go.dev
|
2月前
|
Go 索引
go语言使用strings包
go语言使用strings包
33 3
|
2月前
|
编译器 Go 开发者
go语言中导入相关包
【11月更文挑战第1天】
39 3
|
2月前
|
JSON 监控 安全
go语言选择合适的工具和库
【10月更文挑战第17天】
18 2
|
3月前
|
存储 Go 数据库
Go语言Context包源码学习
【10月更文挑战第21天】Go 语言中的 `context` 包用于在函数调用链中传递请求上下文信息,支持请求的取消、超时和截止时间管理。其核心接口 `Context` 定义了 `Deadline`、`Done`、`Err` 和 `Value` 方法,分别用于处理截止时间、取消信号、错误信息和键值对数据。包内提供了 `emptyCtx`、`cancelCtx`、`timerCtx` 和 `valueCtx` 四种实现类型,满足不同场景需求。示例代码展示了如何使用带有超时功能的上下文进行任务管理和取消。
|
4月前
|
存储 Go
Golang语言基于go module方式管理包(package)
这篇文章详细介绍了Golang语言中基于go module方式管理包(package)的方法,包括Go Modules的发展历史、go module的介绍、常用命令和操作步骤,并通过代码示例展示了如何初始化项目、引入第三方包、组织代码结构以及运行测试。
86 3
|
5月前
|
Kubernetes 数据可视化 Java
|
5月前
|
Go 开发者
|
5月前
|
算法 测试技术 Go
|
5月前
|
编译器 Go 开发者
Go 程序中的包:定义、作用与应用指南
【8月更文挑战第31天】
103 0