Golang包管理工具glide简介

前言

Golang是一个十分有趣,简洁而有力的开发语言,用来开发并发/并行程序是一件很愉快的事情。在这里我感受到了其中一些好处:

  • 没有少了许多代码格式风格的争论,强制统一的风格多好;
  • 编译速度超快,再也不用等待许久,才能编译完工程(测试驱动开发自然更爽);
  • 也不会出现同一个项目组中的人,在使用同一个语言的不同子集。但这种情况不论是在C#还是在Java的世界里,都还是普遍存在的;
  • 轻松跨平台(当然Java做得不错,C#/.net还是努力中...)
  • 这是一门非常简洁、简单、清晰的编程语言(关键字好少啊)
  • 包依赖处理得很有趣;
  • 错误处理机制很有趣,个人觉得比C#/Java的异常处理机制更方便,也更合理些;
  • 对面向对象编程很有趣,非侵入性的接口实现方式,太赞了。
  • 用组合而不是继承

    有些东西没有,比如模板,这个东西有一大片争论,官方也有明确的回应。是啊,为什么一定要模板呢?非要不可吗?这么关键吗?如果非要不可,是不是go并不是这个环境下的最佳选择呢。

还有一个问题的是包管理,并没有官方最佳管理方案,在go的世界里存在大量的自制解决方案。go语言的包是没有中央库统一管理的,通过使用go get命令从远程代码库(github.com,goolge code 等)拉取,直接跳过中央版本库的约束,让代码的拉取直接基于源代码版本控制库,开发者间的协同直接依赖于源代码的版本控制。直接去除了库版本的概念。没有明显的包版本标识,感觉还是有点不适应,官方的建议是把外部依赖的代码全部复制到自己可控的源代码库中,进行同意管理。从而做到对依赖包的可控管理。

1.5版本的vendor目录特性后,官方wiki推荐了多种支持这种特性的包管理工具如:Godep、gv、gvt、glide、Govendor等。我比较喜欢glide。此外,作为程序员翻墙似乎是必备技能,翻得一手好墙,才能跟得上步伐,才有收起刀落的手感,怎一个爽字了得。别问我怎么翻墙,找度娘,她知道。

glide

glide是Go的包管理工具。支持语义化版本,支持Git、Svn等,支持Go工具链,支持vendor目录,支持从Godep、GB、GPM、Gom倒入,支持私有的Repos和Forks。

使用glide管理的工程目录结构如下:

- $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.

安装

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

初始化

$ glide init

初始化,glide扫描代码目录,创建一个glide.yaml文件,文件中记录了所有的依赖

编辑配置

$ edit glide.yaml

通过修改glide.yaml文件,可以添加版本信息等,这一步不是必须的。

解析下载包依赖

$ glide update

或者

$ glide up

下载和更新glide.yaml中列出的所有依赖包,并将它们放到vendor目录下。glide同时也递归获取依赖包需要的任何依赖项包括配置文件中定义的依赖项目。glide递归获取依赖,可以识别Glide、Godep、gb、gom和GPM管理的项目。

当依赖被制定到特定的版本时,名为glide.lock的文件会被创建或者更新。例如,如果在glide.yaml中一个版本被指定在一个范围内(如:^1.2.3),那么glide将在glide.yaml中设定一个特定提交ID(commit id)。如此,将允许重复安装(见 glide install命令)。

从获取的依赖包中移除嵌套的vendor/目录可以使用-v标记。

安装特定版本

当需要从glide.lock文件中安装制定版本的包是,可以使用install命令:

glide install

该命令将会读取glide.lock文件,当glide.lock文件和glide.yaml不同步时,如glide.yaml发生改变,glide将会提供一个警告。运行glide up命令更新依赖树时,将会重建glide.lock文件。

查看glide.yaml中依赖名称

$ glide name

查看依赖列表

$ glide list

查看帮助

$ glide help

参看glide版本信息

$ glide --version

Golang包管理工具glide简介的更多相关文章

  1. golang包管理工具glide安装

    1:下载安装glide go get github.com/Masterminds/glide glide的源码以及exe文件在第一个gopath目录,如果不知道哪个是第一个gopath,echo一下 ...

  2. go包管理工具glide使用方法

    golang没有官方最佳管理方案,在go的世界里存在大量的自制解决方案. go语言的包是没有中央库统一管理的,通过使用go get命令从远程代码库(github.com,goolge code 等)拉 ...

  3. Golang学习--包管理工具glide

    上一篇文章中我们已经成功的运行了go的代码,这是我们迈出的最基础的一步. 一个项目通常会依赖很多外部的库,当依赖的库比较多的时候,手工管理就会比较麻烦,这个时候就需要包管理工具出场了,帮你管理好所有依 ...

  4. golang包管理工具

    软件开发中,不可避免的会使用到第三方库,因此包管理工具可以极大的方便开发者管理第三方依赖,避免掉入"依赖地狱". 作为google强大背书的golang语言,golang官方包管理 ...

  5. golang包管理工具及环境管理工具;如何下载外网的依赖包

    简介: golang的包管理工具类似于java的maven.python的pip.js的npm,可以实现依赖包的统一管理:有很多:govendor.godep.glide,挑一个自己喜欢的用吧.mac ...

  6. Go语言包管理工具Glide

      Go语言包管理工具用于管理Go项目的库和库的依赖引用. 包管理工具普遍会在Go项目根目录生成Vendor文件夹并自动下载该Go项目需要的库. Go语言有很多开源的包管理工具,这里主要介绍Glide ...

  7. Golang Vendor 包管理工具 glide 使用教程

    Glide 是 Golang 的 Vendor 包管理器,方便你管理 vendor 和 verdor 包.类似 Java 的 Maven,PHP 的 Composer. Github:https:// ...

  8. go包管理工具glide

    一.命令 安装 $ go get github.com/Masterminds/glide $ go install github.com/Masterminds/glide 初始化项目并在当前项目下 ...

  9. 【转】Mac端包管理工具——Homebrew简介及安装

    Homebrew官网 http://brew.sh/index_zh-cn.html Homebrew是神马 linux系统有个让人蛋疼的通病,软件包依赖,好在当前主流的两大发行版本都自带了解决方案, ...

随机推荐

  1. 【原】Shiro框架基础搭建[2]

    简介: 关于搭建一个最基础的shiro网上的例子有很多,这里是记录一下自己尝试去看官方文档所搭建的一个小demo,项目采用的是原始的java静态工程,导入相关jar包后就能运行. 首先进入官网http ...

  2. PHP错误日志和内存查看

    1.通过命令查看服务器上一共开了多少的 php-cgi 进程: ps -fe |grep "php-fpm"|grep "pool"|wc -l 2.查看FPM ...

  3. 微信网页授权获取code

    <script> var code = GetQueryString('code'); var callback = 'personal.html'; var appId = " ...

  4. [翻译]Review——24 tips for React Native you probably want to know

    Post author: Albert Gao Post link: http://www.albertgao.xyz/2018/05/30/24-tips-for-react-native-you- ...

  5. Vue如何使用动态刷新Echarts组件

    这次给大家带来Vue如何使用动态刷新Echarts组件,Vue使用动态刷新Echarts组件的注意事项有哪些,下面就是实战案例,一起来看一下. 需求背景:dashboard作为目前企业中后台产品的“门 ...

  6. Yii 之components

    当我们创建一个module的时候,对应的path alias就已经创建.比如我们定义了一个module: www 1 2 3 4 5 'modules'=>array(     'www'=&g ...

  7. python之迭代

    1.何为迭代: 对于给定list或者tuple,通过for循环来遍历这个list或tuple,这种遍历我们称之为迭代(Iteration). 2.python中利用for...in语句来完成迭代语句: ...

  8. opencv3.2.0形态学滤波之膨胀

    //名称:膨胀 //日期:12月21日 //平台:QT5.7.1+opencv3.2.0 /* 膨胀(dilate)的含义: 膨胀就是求局部最大值的操作,就是将图像(或图像的一部分,A)与核 B 进行 ...

  9. 【日常记录】【unity3d】 2D跳跃过快导致角色某帧陷入地面

    如果角色运动过快会导致嵌入地面再反弹出来 : 可以使用更高质量的检测方式 "Continuous" :就可以解决这个问题

  10. Ionic Css样式详解

    Header是固定在屏幕顶部的组件.可以包含如标题和左右的功能按钮.Sub Header同样是固定在顶部,只是是在Header的下面,就算没有写Header这个,Sub Header这个样式也会距离顶 ...