go包管理工具 govendor
govendor介绍
govendor 是 GoLang 常用的一个第三方包管理工具,它的出现解决了不同用户在 clone 同一个项目时从外部获取不同依赖库版本的问题。
govendor会将项目需要的依赖包添加到项目的 vendor 目录下,并且该目录中 vendor.json 文件会保存添加的依赖包的路径等信息。
Golang 项目中的go文件在查找依赖的顺序是,先在当前包下的 vendor 目录中查找,vendor 没找到,然后在 GOPATH 中查找,都没找到最后在 GOROOT 中查找。
govendor只是用来管理项目的依赖包,如果 GOPATH 中本身没有项目的依赖包,则需要通过go get先下载到 GOPATH 中,再通过govendor add +external拷贝到 vendor 目录中。
从 GoLang 1.11 版本开始,官方推出了一个崭新的包管理工具 — go module,随着 GoLang 1.13 版本的发布,go module 默认开启,官方开始强推 go module,使用 go module 作为包管理工具已经成为了官方倡导的趋势。
go module基本使用
安装与使用
govendor安装
在使用Govendor之前,需要安装Govendor。
go get -u github.com/kardianos/govendor
从 Go 1.17 版本开始,'go get' 命令在安装可执行文件方面已经被弃用。
应该使用 'go install' 命令来安装可执行文件。
go install github.com/kardianos/govendor@latest
为了便于项目使用Govendor。建议将 $GOPATH/bin 添加到 PATH 中。
export PATH="$GOPATH/bin:$PATH"
govendor使用
在使用govendor时,当前项目需要在$GOPATH路径下,并且Go版本>=1.5,需要设置GO15VENDOREXPERIMENT=1。
在 Golang1.5 版本后,Go 提供了 GO15VENDOREXPERIMENT 环境变量,并从 GoLang1.6 版本开始默认开启该环境变量。
一旦开启 GO15VENDOREXPERIMENT,go build 等工具除了搜索 $GOPATH/src 路径外,还会搜索当前项目的 vendor 路径,govendor 正是利用了这一特性来实现的。
export GO15VENDOREXPERIMENT=1
1 . govendor初始化(同时创建 vendor 文件夹和 vendor.json 文件)
govendor init
2 . 从 $GOPATH 中复制依赖包到 vendor 目录
govendor add +external
如果你只想添加某个包,执行:
govendor fetch github.com/tjfoc/gmsm/
3 . 从$GOPATH目录下添加依赖包,依赖包会加到 vendor.json
govendor add github.com/tjfoc/gmsm/
4 . 从远程仓库添加包并下载到$GOPATH目录
govendor get github.com/tjfoc/gmsm/
5 . 基于vendor.json 中记录的依赖包信息,拉取更新
govendor sync
6 . 列出代码引用的包及状态
govendor list
7 . 找出使用的对应包
govendor list -v fmt
8 . 从远程仓库添加或更新拉取指定版本的包
govendor fetch golang.org/x/net/context
govendor fetch golang.org/x/net/context@a4bbce9fcae005b22ae5443f6af064d80a6f5a55
govendor fetch golang.org/x/net/context@v1 # Get latest v1.*.* tag or branch.
govendor fetch golang.org/x/net/context@=v1 # Get the tag or branch named "v1".
常见的命令
格式为 govendor COMMAND。
| 命令 | 功能 |
|---|---|
| init | 初始化 vendor 目录 |
| list | 列出所有的依赖包 |
| add | 添加包到 vendor 目录,如 govendor add +external 添加所有外部包 |
| add PKG_PATH | 添加指定的依赖包到 vendor 目录 |
| update | 从 $GOPATH 更新依赖包到 vendor 目录 |
| remove | 从 vendor 管理中删除依赖 |
| status | 列出所有缺失、过期和修改过的包 |
| fetch | 添加或更新包到本地 vendor 目录 |
| sync | 本地存在 vendor.json 时候拉去依赖包,匹配所记录的版本 |
| get | 类似 go get 目录,拉取依赖包到 vendor 目录 |
go vendor –help查看子命令
Sub-Commands
init Create the "vendor" folder and the "vendor.json" file.
list List and filter existing dependencies and packages.
add Add packages from $GOPATH.
update Update packages from $GOPATH.
remove Remove packages from the vendor folder.
status Lists any packages missing, out-of-date, or modified locally.
fetch Add new or update vendor folder packages from remote repository.
sync Pull packages into vendor folder from remote repository with revisions
from vendor.json file.
migrate Move packages from a legacy tool to the vendor folder with metadata.
get Like "go get" but copies dependencies into a "vendor" folder.
license List discovered licenses for the given status or import paths.
shell Run a "shell" to make multiple sub-commands more efficient for large
projects.
govendor命令参数

Status Types
+local (l) packages in your project
+external (e) referenced packages in GOPATH but not in current project
+vendor (v) packages in the vendor folder
+std (s) packages in the standard library
+excluded (x) external packages explicitly excluded from vendoring
+unused (u) packages in the vendor folder, but unused
+missing (m) referenced packages but not found
+program (p) package is a main package
+outside +external +missing
+all +all packages
注意事项
如果引用包目录下不存在go文件,使用fetch、get等命令会报错
如果$GOPATH目录下存在引用包,使用fetch命令会出现无法下载包的情况
go包管理工具 govendor的更多相关文章
- Go 包依赖管理工具 —— govendor
govendor 是一个基于 vendor 机制实现的 Go 包依赖管理命令行工具.与原生 vendor 无侵入性融合,也支持从其他依赖管理工具迁移,可以很方便的实现同一个包在不同项目中不同版本.以及 ...
- Golang学习--包管理工具glide
上一篇文章中我们已经成功的运行了go的代码,这是我们迈出的最基础的一步. 一个项目通常会依赖很多外部的库,当依赖的库比较多的时候,手工管理就会比较麻烦,这个时候就需要包管理工具出场了,帮你管理好所有依 ...
- Go包管理工具Vendor使用
一.Go包管理工具Vendor 一.使用步骤 1.首先,从go get -u github.com/kardianos/govendor下载govendor工具到本地. 2.govendor使用时,必 ...
- Golang包管理工具glide简介
Golang包管理工具glide简介 前言 Golang是一个十分有趣,简洁而有力的开发语言,用来开发并发/并行程序是一件很愉快的事情.在这里我感受到了其中一些好处: 没有少了许多代码格式风格的争论, ...
- golang包管理工具及环境管理工具;如何下载外网的依赖包
简介: golang的包管理工具类似于java的maven.python的pip.js的npm,可以实现依赖包的统一管理:有很多:govendor.godep.glide,挑一个自己喜欢的用吧.mac ...
- go包管理工具glide使用方法
golang没有官方最佳管理方案,在go的世界里存在大量的自制解决方案. go语言的包是没有中央库统一管理的,通过使用go get命令从远程代码库(github.com,goolge code 等)拉 ...
- golang包管理工具
软件开发中,不可避免的会使用到第三方库,因此包管理工具可以极大的方便开发者管理第三方依赖,避免掉入"依赖地狱". 作为google强大背书的golang语言,golang官方包管理 ...
- glide包管理工具
上一篇文章中我们已经成功的运行了go的代码,这是我们迈出的最基础的一步. 一个项目通常会依赖很多外部的库,当依赖的库比较多的时候,手工管理就会比较麻烦,这个时候就需要包管理工具出场了,帮你管理好所有依 ...
- Go的包管理工具(一)
在前面转载了系列文章:Golang 需要避免踩的 50 个坑,总得来说阅读量都挺大.今天这篇文章,咱们一起聊聊Go的依赖包管理工具. 背景 每一门语言都有其依赖的生态,当我们使用Java语言的时候,使 ...
- go依赖包管理工具vendor基础
go依赖包管理工具vendor基础 vendor是go的依赖包管理工具,主要用于管理项目中使用到的一些依赖. 它将项目依赖的包,特指外部包,复制到当前工程下的vendor目录下,这样go build的 ...
随机推荐
- Qt数据库应用4-数据打印到纸张
一.前言 数据能够打印到pdf文件,当然可以打印到纸张,而且使用qprinter默认就是打印到纸张的,上一篇文章写得功能是打印到pdf,其实还要单独特殊设置打印到文件,并指定格式为pdf.不指定输出文 ...
- Qt通用方法及类库2
函数名 //初始化数据库 static void initDb(const QString &dbName); //初始化文件,不存在则拷贝 static void initFile(cons ...
- Qt音视频开发21-通用硬解码
一.前言 硬件解码是图形芯片厂家提出的用GPU资源解码视频流的方案,与之相对的是软解,也就是传统的用CPU承担解码工作的方案:优点是效率高,功耗低.热功耗低,缺点是缺乏有力的支持(包括滤镜.字幕等), ...
- UML之包的导入与访问
包是UML中管理元素的有效手段,UML中的所有元素均隶属于某一个包,即使你没有指定元素所属的包,这些元素也会被置于一个默认包中,包的本质是命名空间.当我们在一个包中需要访问另一个包中的元素时,可以使用 ...
- 开源即时通讯IM框架MobileIMSDK的H5端技术概览
一.基本介绍 MobileIMSDK的H5端是一套纯JS编写的基于标准WebSocket的即时通讯库: 1)超轻量级.极少依赖: 2)纯JS编写.高度提炼,简单易用: 3)基于标准WebSocket协 ...
- 一套亿级用户的IM架构技术干货(上篇):整体架构、服务拆分等
1.引言 经历过稍有些规模的IM系统开发的同行们都有体会,要想实现大规模并发IM(比如亿级用户和数十亿日消息量这样的规模),在架构设计上需要一些额外的考虑,尤其是要解决用户高并发.服务高可用,架构和实 ...
- linux输出文件名及全路径
有时候需要输出一个文件夹下的文件名及所以绝对路径,在网上找到是这个命令 ls | sed "s:^:`pwd`/:" 看命令不难理解,先是ls列出所有文件名,再使用管道符进行后续操 ...
- w3cschool-Linux shell教程
Shell 教程 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Shell 是指一种应用程序,这个应用程序提供了一个 ...
- C# Winform 通过 NAudio 获取控制电脑操作系统音量
https://github.com/naudio/NAudio NAudio 是一个开源的 .NET 音频库,由 Mark Heath 开发,开源地址:https://github.com/naud ...
- Calendar日历类(抽象类)的使用
4. java.util.Calendar( 日历)类 类 Calendar是一个抽象基类,主用用于完成日期字段之间相互操作的功能. 获取Calendar实例的方法 使用Calendar.get ...