参考文章

学习Golang之后对golang中的版本管理,包管理等机制一直没有很好的琢磨,偶然想起还是觉得很有必要进行归纳,包管理使用起来简单,无非就是installuninstalllist等,但是在工程上包管理要是不当,却会造成很多不必要的麻烦。

gvm

gvm是golang的版本管理程序,为什么需要这么个版本管理,是因为golang还在高速发展中,发版频繁,升级迭代可能不完全兼容上一代,所以这种工具应运而生,像ruby有对应的rvm,node有对应的nvm都是为了方便的进行不同版本的切换。

install

bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)

安装完,验证一下是否安装成功

gvm version

输出

Go Version Manager v1.0.22 installed at /Users/liujb/.gvm

支持的命令

% gvm
Usage: gvm [command] Description:
GVM is the Go Version Manager Commands:
version - print the gvm version number
get - gets the latest code (for debugging)
use - select a go version to use
diff - view changes to Go root
implode - completely remove gvm
install - install go versions
uninstall - uninstall go versions
cross - install go cross compilers
linkthis - link this directory into GOPATH
list - list installed go versions
listall - list available versions
alias - manage go version aliases
pkgset - manage go packages sets
pkgenv - edit the environment for a package set

常见的命令

  1. gvm listall 查看所有的golang版本
  2. gvm install go1.4.2 安装1.4.2版本
  3. gvm use go1.4.2 使用go1.4.2版本,使用后GOPATH变成/Users/liujb/.gvm/pkgsets/go1.4.2/global,这样就相当于每个版本的golang所使用的GOPATH都不一样,这样不同的golang包之间的版本兼容问题也可以得到解决。

gvp/gpm

install

brew install gvp
brew install gpm

use

这两个包一般成对使用,其中gvp命令使用主要设置GOPATH为当前目录,例如

source gvp
echo $GOPATH # 输出/Users/liujb/.godeps:/Users/liujb

gpm主要是通过install命令安装Godeps文件内指定的包,最主要的两个命令

$ gpm get         # Parses the Godeps file, gets dependencies and sets them
# to the appropriate version but does not install them.
$ gpm install # Parses the Godeps file, installs dependencies and sets

Godeps的文件类似

github.com/nu7hatch/gotrail               v0.0.2
github.com/replicon/fast-archiver v1.02
launchpad.net/gocheck r2013.03.03 # Bazaar repositories are supported
code.google.com/p/go.example/hello/... ae081cd1d6cc # And so are Mercurial ones

通过gpm install时候会先解析Godeps文件,然后安装文件内指定的包以及版本,同时安装到.godeps目录下的src/bin/pkg

godep

install

go get github.com/tools/godep
或者
brew install godep

使用

参考1 参考2

在项目的根目录下,执行两个命令,其中需要安装的包需要先使用go get下载到$GOPATH下边,另外所在项目需要在版本管理githg 之下。

godep save
godep restore
Godeps.json的文件格式如下
{
"ImportPath": "github.com/kr/hk",
"GoVersion": "go1.1.2",
"Deps": [
{
"ImportPath": "code.google.com/p/go-netrc/netrc",
"Rev": "28676070ab99"
},
{
"ImportPath": "github.com/kr/binarydist",
"Rev": "3380ade90f8b0dfa3e363fd7d7e941fa857d0d13"
}
]
}

gom

install

go get github.com/mattn/gom

use

创建Gomfiles

gom 'github.com/mattn/go-runewidth', :tag => 'go1'
gom 'github.com/mattn/go-scan', :commit => 'ecb144fb1f2848a24ebfdadf8e64380406d87206'
gom 'github.com/daviddengcn/go-colortext'
gom 'github.com/mattn/go-ole', :goos => 'windows' # Execute only in the "test" environment.
group :test do
gom 'github.com/mattn/go-sqlite3'
end # Execute only for the "custom_group" group.
group :custom_group do
gom 'github.com/golang/lint/golint'
end

执行

gom install

然后会在项目下创建_vendor目录。

% tree -L 4
├── Gomfile
└── _vendor
└── src
└── github.com
├── daviddengcn
└── mattn 5 directories, 1 file

个人小结

  1. gvm说白了是golang的版本管理,跟包管理没有半毛钱关系
  2. gvp/gpm这一配套工具,可以设置当前目录为GOPATH,同时根据Godeps文件的描述,安装指定的包到gvp指定的路径。
  3. godep说白了,就是将通过go get安装的包,通过json文件Godeps.json保存到项目下的Godeps/_workspace目录下,然后编译的时候export GOPATH='Project/Godeps/_workspace':$GOPATH即可。
  4. gomnpm最接近,都只是需要一个包描述文件,然后安装到指定位置,其余什么都不用做了,当然别忘了指定GOPATH

对golang中包的管理机制大概讲这么多,有问题一起沟通。引用注明出处即可。

Golang-and-package-version-managment的更多相关文章

  1. golang (2) package

    综述 golang package是基本的管理单元,package是golang最基本的分发单位和工程管理中依赖关系的体现. 每个golang源代码文件开头都拥有一个package声明,表示该gola ...

  2. golang的哪些坑爷事: package实践

    在golang中package是个困惑的概念, 特别是package还可以与folder不同名, 委实让我恶心了一把. 关于golang的package的最佳实践: package is folder ...

  3. [工作积累] NDK通过Java获取package name 和version

    ////////////////////////////////////////////////////////////////////////// //Java code snippet //get ...

  4. 关于golang中包(package)的二三事儿

    golang的package和其他语言的组织方式完全不同,刚开始接触时,很不适应. golang的package的特点: 1.go的package不局限于一个文件,可以由多个文件组成. 组成一个pac ...

  5. golang在Windows下Sublime Text开发调试环境的配置

    一.前言 近期本人有工作调动,进入了一个全新的领域[golang]服务端开发.在此写下本文,希望给那些没接触过golang开发调试环境及还在犹豫选择那家golang IDE而纠结的朋友们一点点帮助,如 ...

  6. PHP和Golang使用Thrift1和Thrift2访问Hbase0.96.2(ubuntu12.04)

    目录: 一.Thrift1和Thrift2的简要介绍 1) 写在前面 2) Thrift1和Thrift2的区别  二.Thrift0.9.2的安装 1) 安装依赖插件 2) Thrift0.9.2的 ...

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

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

  8. C/C++调用Golang 一

    C/C++调用Golang 一 (开发环境: 操作系统: windows 7 32位操作系统 C++: visual studio 2010 Golang:go version go1.9 windo ...

  9. Golang Go Go Go part1:安装及运行

    golang 知识图谱 https://www.processon.com/view/link/5a9ba4c8e4b0a9d22eb3bdf0 一.安装 最新版本安装包地址:https://gola ...

  10. 6行代码解决golang TCP粘包

    转自:https://studygolang.com/articles/12483 什么是TCP粘包问题以及为什么会产生TCP粘包,本文不加讨论.本文使用golang的bufio.Scanner来实现 ...

随机推荐

  1. Hibernate的事务机制

    http://www.cnblogs.com/jerryxing/archive/2012/04/24/2468999.html http://www.cnblogs.com/xiaofeilee/p ...

  2. Tensorboard服务激活

    首先确定Tensorflow的具体位置(在Dos环境下,也就是cmd) cd .. cd scripts conda env list activate tensorflow tensorboard ...

  3. 解析xml文件,遍历输出xml文件中的所有节点, 最终模仿实现struts2框架自动封装参数的功能

    程序结构:src文件夹下存放xml文件 该文件内容: <?xml version="1.0" encoding="UTF-8"?> <myst ...

  4. ie6 bug 收集

    1.IE6中奇数宽高的BUG IE6下查看,变成了right:1px的效果了: IE6还有奇数宽高的bug,解决方案就是将外部相对定位的div宽度改成偶数.高度也是一样的查看源码: CSS代码: #o ...

  5. ASP.NET-AD开发技巧

    分享一篇很好的介绍AD属性的文章 AD图片插件 如何给AD添加图片 http://www.doc88.com/p-9542932844870.html AD过滤条件 重命名ou使用user.Renam ...

  6. C#中的string驻留池

    刚开始学习C#的时候,就听说CLR对于String类有一种特别的内存管理机制:有时候,明明声明了两个String类的对象,但是他们偏偏却指向同一个实例.如下: String s1 = "He ...

  7. C#中的==和Equals

    == 和 Equals 简要:==比较栈上的内容,Equals比较堆上的内容 object x = 5, y = 5; Console.WriteLine(x == y); // "==&q ...

  8. 产品经理---- idea good idea

    想问题有不同的思想. 1.先去娶老婆再生娃. 我有啥,我能用这些做啥? [大概这就是泯然众人的思想吧] 2.先做衣服后长肉 我想要做个啥?然后我需要怎么做?怎么做的什么? 好的产品经理我认为是第二种. ...

  9. 【Java并发编程实战】—–synchronized

    在我们的实际应用其中可能常常会遇到这样一个场景:多个线程读或者.写相同的数据,訪问相同的文件等等.对于这样的情况假设我们不加以控制,是非常easy导致错误的. 在java中,为了解决问题,引入临界区概 ...

  10. CSS初步理解

    近期在学习牛腩的时候遇到了网页的制作.挺新奇的.其中涉及到了有关CSS的知识,于是乎自己也就花费两个小时的时间.找了本浅显易懂的书来看了一遍,从宏观上来了解CSS的相关内容.有关CSS的基础知识详见下 ...