Golang包管理工具Glide,你值得拥有

更多精彩文章https://deepzz.com

“依赖地狱”是每个程序员在成长之路上都会面临的情况,首先我们通过语义化版本来控制软件的版本,然后在我们的项目里通过指定软件版本来达到控制依赖的目的。

如:你的项目A依赖多个项目B1,B2,B3,而B1,B2,B3又依赖着其它项目C1,C2...。一个项目依赖这多个项目,当项目C1修复BUG版本发生变化,如果A依旧使用旧版本,势必引起未知的问题。所以,你需要意识到包依赖管理的重要性。

在Go语言中,我比较推荐大家使用Glide作为包管理器。它能够自动识别Godeps的包管理,十足的很方便。本节介绍glide.yml的语义说明以及版本指定的格式。

glide.yml文件

glide.yml是 glide 包管理的配置文件。下面我们对glide.yml的相关元素进行说明。

这里是一个完整的glide.yml文件:


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:顶部的 package 是它所在GOPATH的位置,glide 将从该位置下开始导包。

  • homepage:该项目的详情页面。

  • license:许可证标识,可以是SPDX license字符串或文件路径。

  • owners:项目的所有者信息,便于接受漏洞信息。

  • ignore:忽略导入的包,注意是包而不是目录。

  • excludeDirs:排除扫描依赖的目录。

  • import:import 的包列表:

  • package:导入包的名称,必填。软件包名称遵循go工具所用的相同模式。这意味着:1、映射到VCS远程位置的软件包名称以.git,.bzr,.hg或.svn结尾。 例如,example.com/foo/pkg.git/subpkg。2、GitHub, BitBucket, Launchpad, IBM Bluemix Services, and Go on Google Source是特殊情况,不需要 VCS 扩展。

  • version:可以为semantic version, semantic version range, branch, tag 或者 commit id。

  • repo:如果包名称不是repo位置或这是一个私人存储库,它可以去这里。 该软件包将从repo签出并放在软件包名称指定的位置。 这允许使用fork。

  • vcs:要使用的VCS,如git,hg,bzr或svn。仅当无法从名称中检测到类型时才需要。例如,以.git或GitHub结尾的仓库可以被检测为Git。 对于Bitbucket的repo,我们可以联系API来发现类型。

  • subpackages:在存储库中使用的包的记录。这不包括存储库中的所有包,而是包括正在使用的包。

  • os:用于过滤的操作系统的列表。如果设置它将比较当前运行时操作系统与指定的操作系统,并且只有获取匹配的依赖。如果未设置过滤,则跳过。这些名称与构建标志和GOOS环境变量中使用的名称相同。

  • arch:用于过滤的体系结构列表。如果设置它将比较当前运行时架构与指定的架构,并且只有在匹配时获取依赖关系。如果未设置过滤,则跳过。名称与构建标志和GOARCH环境变量中使用的名称相同。

  • testImport:在导入中未列出的测试中使用的软件包列表。每个包具有与导入下列出的相同的详细信息。

版本和范围

Glide 支持Semantic Versions,SemVer ranges,branches,tags和 commit ids 作为 version.

基本

一个简单的范围格式是> 1.2.3。这告诉 Glide 去使用1.2.3之后的最新版本。它还支持以下操作符:

  • =:等于(可省略)

  • !=:不等于

  • >:大于

  • <:小于

  • >=:大于等于

  • <=:小于等于

这些还可以组合。,是并且和||是或者。或运算符会导致对组和运算符进行检查,如:">= 1.2, < 3.0.0 || >= 4.2.3"

连字符-

有多个快捷方式来处理范围,第一个是连字符范围。这些看起来像:

  • 1.2 - 1.4.5等价于>= 1.2, <= 1.4.5

  • 2.3.4 - 4.5等价于>= 2.3.4, <= 4.5

通配符x,X,*

xX*字符可用作通配符。这适用于所有比较运算符。当在=运算符上使用时,它会返回到 patch 级别比较(参见下面的波形)。例如:

  • 1.2.x等价于>= 1.2.0, < 1.3.0

  • >= 1.2.x等价于>= 1.2.0

  • <= 2.x等价于< 3

  • *等价与>= 0.0.0

波浪号~(Patch)

波形(~)比较运算符用于指定 minor 版本修改的范围,而当缺少 minor 编号时,major 级别更改。例如:

  • ~1.2.3等价于>= 1.2.3, < 1.3.0

  • ~1等价于>= 1, < 2

  • ~2.3等价于>= 2.3, < 2.4

  • ~1.2.x等价于>= 1.2.0, < 1.3.0

  • ~1.x等价于>= 1, < 2

插入符^(Major)

插入符号(^)比较运算符用于 major 级别的更改。当 API 版本的比较作为 major 更改是 API 打破时,这是有用的。例如:

  • ^1.2.3等价于>= 1.2.3, < 2.0.0

  • ^1.2.x等价于>= 1.2.0, < 2.0.0

  • ^2.3等价于>= 2.3, < 3

  • ^2.x等价于>= 2.0.0, < 3

本文链接:https://deepzz.com/post/glide-package-management-introduce.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,656评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,116评论 25 707
  • 最近在写个性化推荐的论文,经常用到Python来处理数据,被pandas和numpy中的数据选取和索引问题绕的比较...
    shuhanrainbow阅读 4,553评论 6 19
  • 有时候,觉得自己不是一个特别好的人。把人心想得太复杂,格局太小。 之所以这么说,是因为我是个太关注细节的人。有人说...
    海新帆影阅读 243评论 1 1
  • 今天给大家分享一个真实的故事。 一个上流社会的大富翁,有一天突然卖掉公司、房子、车子,不远万里跑到异国他乡...
    张一朵阅读 229评论 0 0