设为首页 收藏本站
查看: 1707|回复: 0

[经验分享] Golang Vendor 包管理工具 glide 使用教程

[复制链接]

尚未签到

发表于 2018-1-6 17:46:05 | 显示全部楼层 |阅读模式
  Glide 是 Golang 的 Vendor 包管理器,方便你管理 vendor 和 verdor 包。类似 Java 的 Maven,PHP 的 Composer。


  • Github:https://github.com/Masterminds/glide
  • 在线文档:http://glide.readthedocs.io/en/stable
  主要特性:


  •   简单管理依赖

  •   支持 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.3 is equivalent to >= 1.2.3, < 1.3.0
  • ~1 is equivalent to >= 1, < 2
  • ~2.3 is equivalent to >= 2.3, < 2.4
  • ~1.2.x is equivalent to >= 1.2.0, < 1.3.0
  • ~1.x is equivalent to >= 1, < 2
脱字符 范围比较(主版本)
  脱字符比较操作符是 为主版本号修改服务的。通常用于接口 主版本比较,如下所示:


  • ^1.2.3 is equivalent to >= 1.2.3, < 2.0.0
  • ^1.2.x is equivalent to >= 1.2.0, < 2.0.0
  • ^2.3 is equivalent to >= 2.3, < 3
  • ^2.x is 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/
  延伸阅读:
  .yaml 文件格式简介
  【Go命令教程】命令汇总
  【推荐】Golang Vendor 包机制 及 注意事项

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-432301-1-1.html 上篇帖子: 读SRE Google运维解密有感(一) 下篇帖子: 【MySQL】容器集群支持数据库实践
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表