[golang] Glide 包管理

一、概述

golang的包管理工具有很多,本篇幅主要介绍glide进行包管理。

二、安装及命令介绍

go get github.com/Masterminds/glide

glide create|init 初始化项目并创建glide.yaml文件.

glide get 获取单个包

  --all-dependencies 会下载所有关联的依赖包

  -s 删除所有版本控制,如.git

  -v 删除嵌套的vendor

glide install 安装包

glide update|up 更新包

三、案例测试

准备:本次测试的包是 github.com/mattn/go-adodb ,这个包其中有一个依赖包是 github.com/go-ole/go-ole

3.1 下载单个包

command:
    glide get github.com/mattn/go-adodb

glide.lock:
    hash:    60061bf3133f0eec2f147f3d80f3e37c402ee12df8cde841b03d80c82a96bab7
    updated: 2016-05-18T23:30:08.5219207+08:00
    imports:
    - name: github.com/mattn/go-adodb
      version: 452cccbbcfb7906b3cbc512992557c1083e1011b
    devImports: []

glide.yaml:
    package: glide_demo6
    import:
    - package: github.com/mattn/go-adodb

  

3.2 下载单个包, --all-dependencies

command:
    glide get --all-dependencies -s -v github.com/mattn/go-adodb

glide.lock:
    hash: 60061bf3133f0eec2f147f3d80f3e37c402ee12df8cde841b03d80c82a96bab7
    updated: 2016-05-18T23:34:48.7545322+08:00
    imports:
    - name: github.com/go-ole/go-ole
      version: 572eabb84c424e76a0d39d31510dd7dfd62f70b2
      subpackages:
      - oleutil
    - name: github.com/gonuts/commander
      version: f8ba4e959ca914268227c3ebbd7f6bf0bb35541a
    - name: github.com/gonuts/flag
      version: 741a6cbd37a30dedc93f817e7de6aaf0ca38a493
    - name: github.com/mattn/go-adodb
      version: 452cccbbcfb7906b3cbc512992557c1083e1011b
    devImports: []

glide.yaml:
    package: glide_demo6
    import:
    - package: github.com/mattn/go-adodb

从lock中可以看到,确实将所有的依赖包都下载了。

3.3 下载制定版本号的包

command:
    glide get github.com/go-sql-driver/mysql#v1.2

glide.yaml:
    package: glide_demo
    import:
    - package: github.com/go-sql-driver/mysql
      version: v1.2

  

3.4 团队开发

在团队开始时,需要将 glide.yaml 和 glide.lock 进行版本控制,vendor 忽略掉。

模拟下团队开发的流程

A同学:初始化项目,并提交了源码,其中glide.yaml 和 glide.lock的内容如下

glide.yaml:
    package: glide_demo6
    import:
    - package: github.com/mattn/go-adodb
    - package: github.com/go-ole/go-ole
glide.lock:
    hash: 18e3b9c2f5c11f3268b22ebdbea09636c5cae28e78f0011578f455c485e9d214
    updated: 2016-05-18T23:43:15.8217224+08:00
    imports:
    - name: github.com/go-ole/go-ole
      version: 572eabb84c424e76a0d39d31510dd7dfd62f70b2
    - name: github.com/mattn/go-adodb
      version: 452cccbbcfb7906b3cbc512992557c1083e1011b
    devImports: []

B同学:拉去项目,执行 glide install,会自动下载对应的包

四、总结

使用glide的好处是,每个项目都采用各自独立的包,而且可以很好的控制包的版本,这在团队开发中尤其重要。

时间: 2024-12-29 15:14:19

[golang] Glide 包管理的相关文章

[golang] Glide 包管理工具,在windows10 64位系统上的bug修复方案

bug重现 [ERROR] Unable to export dependencies to vendor directory: Error moving files: exit status 1. output: Access is denied. 0 dir(s) moved 解决方案 第一步 //找到这个文件 github.com/Masterminds/glide/blob/master/path/winbug.go // CustomRemoveAll is similar to os

Golang学习--包管理工具glide

上一篇文章中我们已经成功的运行了go的代码,这是我们迈出的最基础的一步. 一个项目通常会依赖很多外部的库,当依赖的库比较多的时候,手工管理就会比较麻烦,这个时候就需要包管理工具出场了,帮你管理好所有依赖的库. php项目中使用composer,javascript项目中使用npm,那么在go项目中,我们需要使用什么? 包依赖工具的选择 当前go的包管理工具有glide.godep.govendor和gvt等,相关对比的文章可以查看<go依赖包管理工具对比>. 功能对比可以参考如下内容(虽然跟上

golang 的glide包管理使用技巧教程

安装glide ? wemall git:(master) ? go get github.com/Masterminds/glide ? wemall git:(master) ? go install github.com/Masterminds/glide ? wemall git:(master) ? glide init ? wemall git:(master) ? glide up [INFO] Loading mirrors from mirrors.yaml file[INFO

go包管理之glide

go语言的包是没有中央库来统一管理的,通过使用go get命令从远程代码库(github.com,goolge code 等)拉取,直接跳过中央版本库的约束,让代码的拉取直接基于源代码版本控制库,开发者间的协同直接依赖于源代码的版本控制.直接去除了库版本的概念.没有明显的包版本标识,感觉还是有点不适应,官方的建议是把外部依赖的代码全部复制到自己可控的源代码库中,进行统一管理,从而做到对依赖包的可控管理. 1.5版本的vendor目录特性后,官方wiki推荐了多种支持这种特性的包管理工具如:God

Golang高阶:Golang1.5到Golang1.12包管理

Golang1.5到Golang1.12包管理 1. 前言 Golang 是一门到如今有十年的静态高级语言了,2009年的时候算是正式推出了,然后到最近的一两年,2017-2018年的时候,突然直线上升,爆火了,得益于容器化运维/直播/短视频/区块链... Golang 语法简单,简单即是复杂,软件构建的核心在于将复杂的东西简单化,处理好复杂度. 作为一个 gopher,我们要知道他的包管理,这样才能合理化代码结构,做好工程管理.(gopher:地鼠) 2. GOPATH/ Golang 1.5

window下golang包管理glide使用说明

golang是一门简洁高效的开发 语言,但是包管理一直是一个痛点,如图 : 很多开源项目特别是github.com中的大量应用golang.org和google.golang.org中的源码,且由于被墙的原因也会导致各种不顺利,复制GOPATH里内容在团队人比较多的时候较复杂 包之前关系复杂,无法确切的知道自己包里引用哪些项目源,甚至可能有 一些被误删导致的问题 无法准确管理引用包源的版本,可能会导致一些项目编译不通过 不像java里有maven或者jar.donet里有dll文件等等,让使用方

亲测可用的golang sql例程与包管理

sqlite与golang package main import ( "database/sql" "fmt" "time" _ "github.com/mattn/go-sqlite3" ) func main() { //打开数据库,如果不存在,则创建 db, err := sql.Open("sqlite3", "./foo.db") checkErr(err) //创建表 sq

golang包管理的古往今来

https://golang.org/ before GO1.5-GOPATH 在GO1.5之前用GOPATH以及GOROOT这两个环境变量来决定包的位置. GOROOT就是告知当前go的安装位置,编译的时候从GOROOT去找sdk的system library. GOPATH的目的是为了告知go,需要代码的时候,去哪里查找.注意这里的代码,包括本项目和引用外部项目的代码.GOPATH可以随着项目的不同而重新设置. 从go 1.8开始,如果GOPATH没有被设置,会有一个默认值,在Unix上为$

golang项目git-subtree完美解决差异包管理

目标: 1.把golang官方已移动过url的包跟随自己的项目git代码上传到项目源码中. 2.把或自己修改过的差异化fork包跟随自己的项目git代码上传到项目源码中. 解决方案: 方案1.第三方包管理 http://tleyden.github.io/blog/2016/02/08/adding-vendoring-to-a-go-project/ 方案2.手动处理过程 a.在项目根目录下创业文件夹 "/vendor/src" b.通过git-subtree下拉包到上一步目录下,红