首页 > 其他分享 >3.3 Go语言从入门到精通:包管理工具之Govendor

3.3 Go语言从入门到精通:包管理工具之Govendor

时间:2023-04-14 14:03:49浏览次数:52  
标签:依赖 vendor get govendor Govendor 3.3 Go 目录


Govendor 是 Go 的另一个依赖包管理工具,它的出现可以避免不同用户在 clone 同一个工程后从外部获取不同依赖库版本的问题,很好的弥补了 GOPATH 包管理的缺陷。govendor 会将工程需要的依赖包添加到工程的 vendor 目录下,并且该目录中 vendor.json 文件会保存添加的依赖包的路径等信息。

(出于知识体系的完整性以及对各类包管理工具的全面了解,本文重点只是介绍Govendor 的存在,并不推荐使用它,仅作了解即可。)

1、Govendor 概述

Go 工程的依赖包经常使用 go get 命令来获取,例如:go get github.com/spf13/cobra/cobra ,会将依赖包下载到 GOPATH 的路径下。

随着 Go 的不断升级,在 Go 1.5版本之后,Go 提供了 GO15VENDOREXPERIMENT 环境变量(Go 1.6版本默认开启该环境变量)和 Govendor 包管理工具,用于将 go build 时的应用路径搜索调整成为当前工程/vendor 目录的方式,有效的解决了不同工程使用自己独立的依赖包目录。

1.1 Govendor介绍

Govendor 是 Go 1.5版本之后引入包管理工具。

其基本思路是,将引用的外部包的源代码放在当前工程的 vendor目录下面(类似于 Nodejsnode_modules 目录),Go 1.5 以后编译 Go 代码会优先从vendor目录先寻找依赖包,vendor目录如果没有找到,然后在 GOPATH 中查找,都没找到最后在 GOROOT 中查找。

特点:

  • 可以采用 govendor add/update$GOPATH 复制现有的依赖。
  • 如果要忽视 vendor/*/,可采用 govendor 同步恢复依赖。
  • 可直接通过 govendor fetch 控制器添加新的依赖或者更新现有依赖。
  • 可采用 govendor migrate 实现系统间迁移。
  • 支持 Linux, OS X, Windows,甚至现有所有操作系统。
  • 支持GitHgSVNBZR(必须指定一个路径)。

1.2 解决的问题

  • 不同版本依赖问题:解决不同用户在 clone 同一个工程后从外部获取不同依赖库版本的问题。
  • 迁移问题:将 Go 源码拷贝到当前工程的 vendor目录下,这样打包当前的工程代码到任意机器的 $GOPATH/src下都可以通过编译,避免项目代码外部依赖过多。迁移后, 无需再次 go get 拉取外部依赖包,况且再次 go get 重新拉取的外部依赖包的版本可能和工程开发时使用的不一致,将会导致编译错误问题。

1.3 常用命令

govendor 提供了很多命令供大家使用,下面列举了一些常用命令,更多命令可通过 govendor --help 查看。

命令

功能

init

初始化 vendor 目录

list

列出所有的依赖包

add

添加包到 vendor 目录,如 govendor add +external 添加所有外部包

update

$GOPATH 更新依赖包到 vendor 目录

remove

vendor 管理中删除依赖

status

列出所有缺失、过期和修改过的包

fetch

添加或更新包到本地 vendor 目录

sync

本地存在 vendor.json 时候拉去依赖包,匹配所记录的版本

get

类似 go get 目录,拉取依赖包到 vendor 目录

2、快速入门

2.1 安装

使用 go get命令快速安装:

go get -u -v github.com/kardianos/govendor

建议将 $GOPATH/bin 加入到 PATH 中,方便直接使用 govendor 命令。

2.2 初始化

进入项目根目录下执行 govendor init 命令,会在项目根目录下自动新建一个 vendor 目录,并在其中生成vendor.json(存储包的版本信息)

govendor init

2.3 拉取包

使用 govendor fetchgovendor get 命令远程拉取外部依赖包。 例如:

govendor fetch github.com/spf13/cobra/cobra

3、小结

本文主要是讲解了一下 Govendor 的存在以及如何使用,但随着Go 的不断壮大,随之被 Go modules 而取代了,所以不推荐使用 Govendor。下一篇文章将会对 Go modules 展开说明,它将作为目前包管理工具的首选,也是必选。


标签:依赖,vendor,get,govendor,Govendor,3.3,Go,目录
From: https://blog.51cto.com/xcbeyond/6190031

相关文章

  • 3.1 Go语言从入门到精通:包
    Go语言像Java语言一样都拥有包的概念,通过使用包来组织源代码。包(package)是多个Go源码的集合,是一种高级的代码复用方案。Go语言中为我们提供了很多内置包,如fmt、os、io等。任何Go源代码文件都必属于某个包,同时源码文件的第一行有效代码必须是packagepacakgeName语句,通过......
  • 3.2 Go语言从入门到精通:包管理工具之GOPATH
    当我们真正用Go去做项目,或者阅读Go项目(如,Go实现的开源项目)时,不可避免的会遇到包依赖问题,一些包管理方式总是很难区分、选择。Go的包管理与Java的Maven依赖管理不太一样,起初Go的包管理方式经常会被人吐槽,但随之Go版本的升级也出现了不同的包管理方式,以满足不同的需求。今天,我们......
  • SqlMapClient operation; uncategorized SQLException for SQL []; SQL state [null];
    网上解决方案1.起初没有创建序列s_log,因此需要在Oracle补上s_log序列。<!--增加日志--><insertid="logSave"parameterClass="com.reportcenter.sys.dto.OperateLogDto">INSERTINTOT_LOG(C_AUTOID,USRCDE,USRADDRESS,OPERATION,BEGINTME,ENDTME,OPER......
  • Go For Web:一篇文章带你用 Go 搭建一个最简单的 Web 服务、了解 Golang 运行 web 的原
    前言:本文作为解决如何通过Golang来编写Web应用这个问题的前瞻,对Golang中的Web基础部分进行一个简单的介绍。目前Go拥有成熟的Http处理包,所以我们去编写一个做任何事情的动态Web程序应该是很轻松的,接下来我们就去学习了解一些关于Web的相关基础,了解一些概念,以及......
  • google + chatgpt
    google注册网址:https://www.google.com/使用右上角登录按钮点击创建账户然后根据步骤注册chagpt注册1.https://chat.openai.com/auth/login2.1页面用不了的情况就用2使用下面的chatgpt的continuewithgoogle。然后登录谷歌账号之后按步骤即可......
  • Django Admin SimpleUI 自定义列
    DjangoAdminSimpleUI的一些简单用法注意事项:自定义列会遍历所有取出来的数据,需注意先定义下模型#models.pyclassDog(models.Model):name=models.CharField(max_length=15,verbose_name='小狗名字')age=models.IntegerField(verbose_name='小狗年龄',defa......
  • Django在类中使用装饰器
    类的视图函数中使用装饰器场景描述前后端分离项目后端暴露接口前端调用一个接口根据不同的请求方式处理不同的内容比如我有一个/user接口:get:返回成员信息post:添加信息put:修改信息delete:删除信息在每个请求中都需要判断凭证,也就是请求头中的某个字段,来鉴别用户身份,如果......
  • Django入门学习
    Django是一个开放源代码的web应用框架,由python编写,采用了MVT软件设计模式,即模型(Model)、视图(View)和模板(Template)。一、Django版本对应python版本Django版本Python版本3.23.6,3.7,3.8,3.9,3.10(在3.2.9中就已经加入了)4.03.8,3.9,3.104.13.8,3.9,3.10,3......
  • django admin 使用SimpleUI自定义按钮弹窗框示例
    actions=['button_exeScript',]defbutton_exeScript(self,request,queryset):passbutton_exeScript.layer={#弹出层中的输入框配置#这里指定对话框的标题'title':'弹出层输入框',#提示信息......
  • win10下注册goLand
    win10下注册goLand修改系统时间到2021-4-13号使用以下注册码激活S32PGH0SQB-eyJsaWNlbnNlSWQiOiJTMzJQR0gwU1FCIiwibGljZW5zZWVOYW1lIjoiSmF2YSDlpKfnpZ4iLCJhc3NpZ25lZU5hbWUiOiIiLCJhc3NpZ25lZUVtYWlsIjoiIiwibGljZW5zZVJlc3RyaWN0aW9uIjoiIiwiY2hlY2tDb25jdXJyZW50VXNlIjpm......