Go的包管理工具(二):glide

栏目: IOS · Android · 发布时间: 5年前

在上一篇文章中介绍了 Go 的环境配置和包管理的几种方式。Go 的包管理是一直是为人诟病之处,从 Go 1.5 引入的 vendor 机制、准官方工具dep,到 Go 1.5 的 go modules,目前为止还没一个简便的解决方案。本文将会介绍 glide

glide 是在 vendor 之后出来的。glide 的依赖包信息在 glide.yaml 和 glide.lock 中,前者记录了所有依赖的包,后者记录了依赖包的版本信息

工作原理

Glide 扫描应用程序或库的源代码以确定所需的依赖项。要确定版本和位置(例如forks的别名),Glide会使用规则读取 glide.yaml 文件。有了这些信息,Glide将检索所需的依赖项。

遇到依赖包时,会扫描其导入以确定依赖关系的依赖关系(传递依赖关系)。如果依赖项目包含 glide.yaml 文件,则该信息用于帮助确定从要使用的位置或版本获取时的依赖关系规则。还会导入 Godep,GB,GOM 和GPM 的配置。依赖项将导出到 verdor。生成的 glide.lock 文件,包含所有依赖项,包括传递依赖项。

安装 glide

可以通过脚本安装:

curl https://glide.sh/get | sh

执行之后,将会安装最新的 release 版本。在 Mac 上,还可以通过 brew install glide 安装。

$ glide -v
glide version v0.13.2

0.13.2 是当前最新的版本。

初始化 glide

首先需要进入 GOPATH 中的项目,

cd $GOPATH/src/go-web-practice

初始化

$ glide create
[INFO]	Generating a YAML configuration file and guessing the dependencies
[INFO]	Attempting to import from other package managers (use --skip-import to skip)
[INFO]	Scanning code to look for dependencies
[INFO]	--> Found reference to github.com/Masterminds/semver
[INFO]	--> Found reference to github.com/Masterminds/vcs
[INFO]	--> Found reference to github.com/codegangsta/cli
[INFO]	--> Found reference to gopkg.in/yaml.v2
[INFO]	Writing configuration file (glide.yaml)
[INFO]	Would you like Glide to help you find ways to improve your glide.yaml configuration?
[INFO]	If you want to revisit this step you can use the config-wizard command at any time.
[INFO]	Yes (Y) or No (N)?
n
[INFO]	You can now edit the glide.yaml file. Consider:
[INFO]	--> Using versions and ranges. See https://glide.sh/docs/versions/
[INFO]	--> Adding additional metadata. See https://glide.sh/docs/glide.yaml/
[INFO]	--> Running the config-wizard command to improve the versions in your configuration

执行初始化, glide.yaml 记载了依赖包的列表及其更新规则,每次执行 glide up 时,都会按照指定的规则下载新版。如下笔者示例创建的 glide.yaml

package: go-web-practice
import:
- package: github.com/astaxie/beego
  version: 1.8.0
- package: github.com/coocood/freecache
- package: github.com/garyburd/redigo
  subpackages:
  - redis
- package: github.com/go-sql-driver/mysql
- package: github.com/bitly/go-simplejson
- package: github.com/orcaman/concurrent-map
- package: golang.org/x/crypto
testImport:
- package: github.com/smartystreets/goconvey
  subpackages:
  - convey

项目的结构

- $GOPATH/src/myProject
  |
  |-- glide.yaml
  |
  |-- glide.lock
  |
  |-- main.go
  |
  |-- mySubpackage
  |    |
  |    |-- foo.go
  |
  |-- vendor
       |-- github.com
            |
            |-- Masterminds
                  |
                  |-- ... etc.

安装依赖

glide install

如上的命令将安装 glide.lock 文件中列出的版本,跳过扫描,除非 glide.lock 文件找不到,它将会执行更新。

直接下载依赖

glide get

除了自动从代码中解析 import 外,glide 还可以通过 glide get 直接下载代码中没有的依赖,与 go get 的用法基本一致。

升级依赖

glide up

glide 会按照语义化版本规则更新依赖包代码,开发过程中如果需要使用新版代码,可以执行这个命令。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

宇宙涟漪中的孩子

宇宙涟漪中的孩子

谢云宁 / 四川科学技术出版社 / 2017-11 / 28.00元

近未来。日冕科技公司通过建造围绕太阳的光幕搜集了近乎无穷的能源,这些能源主要用于地球上的网络空间建设。随着全球网络时间频率的不断提升,越来越多的人选择接驳进虚拟空间,体验现实中难以经历的丰富人生。 网络互动小说作者宁天穹一直自认为是这些人中普通的一员,有一天却被一名读者带进反抗组织,了解到日冕公司的各种秘密,并被告知自己的小说将在抵抗运动中起到重要作用。 起初他拒绝参与,但看到地球被笼......一起来看看 《宇宙涟漪中的孩子》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

MD5 加密
MD5 加密

MD5 加密工具

SHA 加密
SHA 加密

SHA 加密工具