Golang Vendor 包管理工具 glide 使用教程
Glide 是 Golang 的 Vendor 包管理器,方便你管理 vendor 和 verdor 包。类似 Java 的 Maven,PHP 的 Composer。
主要特性:
简单管理依赖
支持 versioning packages,包括 Semantic Versioning 2.0.0 支持
支持 aliasing packages (e.g. for working with github forks)
Remove the need for munging import statements
支持所有
go工具支持 VCS 工具和 Go 支持:git、bzr、hg、svn
支持定制本地和全局插件 (see docs/plugins.md)
仓库缓存
结构:
- $GOPATH/src/myProject (Your project)
|
|-- glide.yaml
|
|-- glide.lock
|
|-- main.go (Your main go code can live here)
|
|-- mySubpackage (You can create your own subpackages, too)
| |
| |-- foo.go
|
|-- vendor
|-- github.com
|
|-- Masterminds
|
|-- ... etc.
安装
# 下载源码包(目前版本:0.12.3)
go get github.com/Masterminds/glide # 进入目录
cd github.com/Masterminds/glide # 编译
# 注意,如果是离线安装的话,需要执行 go install
make build
go build -o glide -ldflags "-X main.version=v0.11.0" glide.go
使用
检测项目的依赖包
Glide 能检测项目的依赖包 并且 创建一个名为 glide.yaml 的文件。能自动识别 Godep, GPM, Gom, and GB 等工具的配置文件。在 项目的 根目录 执行如下命令:
glide init
运行 glide init 命令的时候,会询问你是否需要以向导的方式提示及配置依赖包的版本,每步操作都需要你的确认。
更新 依赖包
执行如下命令,依据配置文件 glide.yaml 的内容,计算各个依赖包的精确版本号:
glide up
“up”是“update”的简写。这个命令会根据 glide.yaml 文件计算所需依赖包,并递归计算依赖包所需依赖包,并且确认各个依赖包的版本号。最后把这些信息写到一个名为 glide.lock 的文件中。
Glide 会把所有依赖包放到项目根目录的 vendor/ 目录下。如果某个依赖包有自己的 vendor/ 目录,默认情况下,Glide 不会删除它。go 工具链会使用它们的嵌套版本。如果想移除它们,使用 up 或 install 命令时,再加一个 --strip-vendor 或 -v 标签。
安装 依赖包
如果想下载所需依赖包,执行如下命令:
glide install
这个命令会做以下 2 件事:
(1) 如果 glide.lock 文件已经存在,Glide 会把 glide.lock 中已经计算好的确定版本号的依赖包批量下载到 vendor/ 目录下;
(2) 如果 glide.local 文件不存在,则会先执行 update 命令;
增加更多的 依赖包
使用 get 命令,Glide 能帮你添加更多的依赖包到 glide.yaml 文件中,如下所示:
glide get github.com/Masterminds/semver
glide get 命令功能 类似 go get,但是它会把依赖包下载到 vendor/ 目录,并且把相关信息配置到 glide.yaml 文件。
这个 get 命令 也可以带版本号,如下所示:
glide get github.com/Masterminds/semver#~1.2.0
“#”是依赖包 和 版本号的分隔符,版本号可以是 语义版本,范围版本,分支版本,标签 或 提交的版本ID。
如果没有指定 具体版本号 或 范围版本号, Glide 会使用 语义版本号,并且提示要求你确认所需要的版本号
注意:
glide 会把下载下来的包缓存到
~/.glide/cache目录下 。
版本号的指定(version字段)
Glide 支持 语义版本,范围版本,分支版本,标签版本,版本ID 最为版本号。
基本范围
举个简单例子,范围版本 > 1.2.3,表示 Glide 会用 大于 1.2.3 以后的最新版本。目前支持如下操作符:
- =: equal (aliased to no operator)
- !=: not equal
- >: greater than
- <: less than
- >=: greater than or equal to
- <=: less than or equal to
它们还可以组合用,“,”表示 “逻辑与”,“||”表示“逻辑或”,如 ">= 1.2, < 3.0.0 || >= 4.2.3"
连字符范围
- 1.2 - 1.4.5 which is equivalent to >= 1.2, <= 1.4.5
- 2.3.4 - 4.5 which is equivalent to >= 2.3.4, <= 4.5
通配符比较
字符 “x”、“X”、"*" 可以当做通配符,它可以应用于所有的比较操作中。当应用于“=”操作符中,它表示补丁最低级别的比较,如下所示:
- 1.2.x is equivalent to >= 1.2.0, < 1.3.0
- >= 1.2.x is equivalent to >= 1.2.0
- <= 2.x is equivalent to < 3
- * is equivalent to >= 0.0.0
波浪线 范围比较(补丁)
波浪线比较操作符主要用于补丁级别范围比较,当为次要版本数字没指定时,次要版本不变,主版本修改。如下所示:
~1.2.3is equivalent to>= 1.2.3, < 1.3.0~1is equivalent to>= 1, < 2~2.3is equivalent to>= 2.3, < 2.4~1.2.xis equivalent to>= 1.2.0, < 1.3.0~1.xis equivalent to>= 1, < 2
脱字符 范围比较(主版本)
脱字符比较操作符是 为主版本号修改服务的。通常用于接口 主版本比较,如下所示:
^1.2.3is equivalent to>= 1.2.3, < 2.0.0^1.2.xis equivalent to>= 1.2.0, < 2.0.0^2.3is equivalent to>= 2.3, < 3^2.xis equivalent to>= 2.0.0, < 3
glide.yaml 文件
文件 glide.yaml 包含了 当前包(项目)及依赖包 的相关信息,以下示例罗列了该文件的主要元素:
package: github.com/Masterminds/glide
homepage: https://masterminds.github.io/glide
license: MIT
owners:
- name: Matt Butcher
email: technosophos@gmail.com
homepage: http://technosophos.com
- name: Matt Farina
email: matt@mattfarina.com
homepage: https://www.mattfarina.com
ignore:
- appengine
excludeDirs:
- node_modules
import:
- package: gopkg.in/yaml.v2
- package: github.com/Masterminds/vcs
version: ^1.2.0
repo: git@github.com:Masterminds/vcs
vcs: git
- package: github.com/codegangsta/cli
version: f89effe81c1ece9c5b0fda359ebd9cf65f169a51
- package: github.com/Masterminds/semver
version: ^1.0.0
testImport:
- package: github.com/arschles/assert
有以下元素:
package: 顶级包导入路径,即 相对 GOPATH/src 的包的导入路径。homepage: 项目的主页,如 http://k8s.io 。- license: 项目的使用权协议。
owners: 项目的作者信息,如 姓名、联系方式(email)、个人主页 等。ignore: 需要忽略导入的包名列表。注意,不是文件夹名。excludeDirs: 需要忽略扫描依赖包的文件夹列表。import: 需要导入的依赖包,每个依赖包 包含以下元素:package: 包路径信息。version: 版本号,如 语义版本、范围版本、分支版本、标签版本、提交号版本等,更多的信息查看文档:versioning documentation。repo: 包的仓库地址信息。如果包名不是包仓库路径信息 或者是 私有仓库,可以从线上的仓库 check out 文件到 包名中指定的(本地)路径,也可以使用 fork 指令。vcs: 使用到的版本控制系统,如 git、hg、bzr 或 svn。如果不能从上述的 package 中确定 版本控制系统类型的话,需要在这里指定。如 仓库路径带有 .git 后缀 或 GitHub 仓库路径 等都可以自动识别类型为 git。subpackages: 当前包所使用到的子包名列表。os: 能适用于哪些操作系统? 与 运行时(runtime) 当中的 操作系统变量(GOOS) 匹配比较,如果是匹配上,就获取该包。arch: 能使用于哪些结构?与 运行时(runtime) 当中的 runtime architecture 变量(GOARCH)匹配比较,如果匹配上,就获取该包。
testImport: 用于测试的包。
翻译自 官方教程:
http://glide.readthedocs.io/en/stable/versions/
延伸阅读:
Golang Vendor 包管理工具 glide 使用教程的更多相关文章
- Golang学习--包管理工具glide
上一篇文章中我们已经成功的运行了go的代码,这是我们迈出的最基础的一步. 一个项目通常会依赖很多外部的库,当依赖的库比较多的时候,手工管理就会比较麻烦,这个时候就需要包管理工具出场了,帮你管理好所有依 ...
- Golang包管理工具glide简介
Golang包管理工具glide简介 前言 Golang是一个十分有趣,简洁而有力的开发语言,用来开发并发/并行程序是一件很愉快的事情.在这里我感受到了其中一些好处: 没有少了许多代码格式风格的争论, ...
- go包管理工具glide使用方法
golang没有官方最佳管理方案,在go的世界里存在大量的自制解决方案. go语言的包是没有中央库统一管理的,通过使用go get命令从远程代码库(github.com,goolge code 等)拉 ...
- Go语言包管理工具Glide
Go语言包管理工具用于管理Go项目的库和库的依赖引用. 包管理工具普遍会在Go项目根目录生成Vendor文件夹并自动下载该Go项目需要的库. Go语言有很多开源的包管理工具,这里主要介绍Glide ...
- golang包管理工具glide安装
1:下载安装glide go get github.com/Masterminds/glide glide的源码以及exe文件在第一个gopath目录,如果不知道哪个是第一个gopath,echo一下 ...
- Go 包管理工具--glide
网上有一篇解释glide比较好的文章:https://my.oschina.net/u/553243/blog/1475626 在命令行中输入glide $glide NAME: glide - Ve ...
- nexus 3.17.0 做为golang 的包管理工具
nexus 3.17.0 新版本对于go 包管理的支持是基于go mod 的,同时我们也需要一个athens server 然后在nexus 中配置proxy 类型的repo 参考配置 来自官方的配置 ...
- go包管理工具glide
一.命令 安装 $ go get github.com/Masterminds/glide $ go install github.com/Masterminds/glide 初始化项目并在当前项目下 ...
- Golang Vendor 包机制 及 注意事项
现在的 Go 版本是 1.8,早在 1.5 时期,就有了 Vendor 包机制,详情可查看博文:“理解 Go 1.5 vendor”. 遇到的问题 个人在使用 Glide 管理 Vendor 包时(附 ...
随机推荐
- 第9月第15天 设计模式 adapter mvc
1. 有一道iOS面试题,iOS中都有什么设计模式?很少有答案说包括adapter. gof 书中adapter模式有以下内容: 实现: ... b ) 使 用 代 理 对 象 在这种方法中, T r ...
- 搜索引擎ElasticSearchV5.4.2系列二之ElasticSearchV5.4.2+kibanaV5.4.2+x-packV5.4.2安装
相关博文: 搜索引擎ElasticSearchV5.4.2系列一之ES介绍 搜索引擎ElasticSearchV5.4.2系列二之ElasticSearchV5.4.2+klanaV5.4.2+x-p ...
- Petrozavodsk WinterTraining 2015
PetrozavodskWinterTraining2015 A - Three Servers 题目描述:有\(n\)个数,将这\(n\)个数分成\(3\)堆,使得\(3\)堆中和的最大值减最小值最 ...
- node.js 安装 测试
2014年5月1日 18:48:01 安装: 系统是centos,里边的python版本是2.4,但是node.js 源码tar包安装要求是 2.6 或者 2.7 下载python 2.7编译安装,注 ...
- 浅谈TCP拥塞控制算法
TCP通过维护一个拥塞窗口来进行拥塞控制,拥塞控制的原则是,只要网络中没有出现拥塞,拥塞窗口的值就可以再增大一些,以便把更多的数据包发送出去,但只要网络出现拥塞,拥塞窗口的值就应该减小一些,以减少注入 ...
- MySQL自定义函数和存储过程的区别:
自定义函数和存储过程的区别: 1)一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强.存储过程,功能强大,可以执行包括修改表等一系列数据库操作:用户定义函数不能用于执行一组修改全局 ...
- hdu 6118度度熊的交易计划(费用流)
度度熊的交易计划 Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- linux cudnn安装
cudnn-8.0-linux-x64-v5.1链接:http://pan.baidu.com/s/1c1JuMty 密码:v0g9 #以CuDNN的v5.1版本,Cuda 8.0为例 sudo ta ...
- Java Socket实战之一 单线程通信基础socket
现在做Java直接使用Socket的情况是越来越少,因为有很多的选择可选,比如说可以用spring,其中就可以支持很多种远程连接的操作,另外jboss的remoting也是不错的选择,还有Apache ...
- 007.SMB其他应用
一 目录权限 系统权限需要对共享目录生效 samba服务器权限也会对共享目录生效 当用户过多权限交叉的时候,建议使用系统权限控制共享目录权限,而不建议采用samba权限来控制 例如: [work] p ...