Golang-and-package-version-managment
学习Golang
之后对golang中的版本管理,包管理等机制一直没有很好的琢磨,偶然想起还是觉得很有必要进行归纳,包管理使用起来简单,无非就是install
,uninstall
,list
等,但是在工程上包管理要是不当,却会造成很多不必要的麻烦。
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
常见的命令
gvm listall
查看所有的golang版本gvm install go1.4.2
安装1.4.2版本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
使用
在项目的根目录下,执行两个命令,其中需要安装的包需要先使用go get
下载到$GOPATH
下边,另外所在项目需要在版本管理git
,hg
之下。
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
个人小结
gvm
说白了是golang
的版本管理,跟包管理没有半毛钱关系gvp/gpm
这一配套工具,可以设置当前目录为GOPATH
,同时根据Godeps
文件的描述,安装指定的包到gvp指定的路径。godep
说白了,就是将通过go get
安装的包,通过json文件Godeps.json
保存到项目下的Godeps/_workspace
目录下,然后编译的时候export GOPATH='Project/Godeps/_workspace':$GOPATH
即可。gom
跟npm
最接近,都只是需要一个包描述文件,然后安装到指定位置,其余什么都不用做了,当然别忘了指定GOPATH
对golang中包的管理机制大概讲这么多,有问题一起沟通。引用注明出处即可。
Golang-and-package-version-managment的更多相关文章
- golang (2) package
综述 golang package是基本的管理单元,package是golang最基本的分发单位和工程管理中依赖关系的体现. 每个golang源代码文件开头都拥有一个package声明,表示该gola ...
- golang的哪些坑爷事: package实践
在golang中package是个困惑的概念, 特别是package还可以与folder不同名, 委实让我恶心了一把. 关于golang的package的最佳实践: package is folder ...
- [工作积累] NDK通过Java获取package name 和version
////////////////////////////////////////////////////////////////////////// //Java code snippet //get ...
- 关于golang中包(package)的二三事儿
golang的package和其他语言的组织方式完全不同,刚开始接触时,很不适应. golang的package的特点: 1.go的package不局限于一个文件,可以由多个文件组成. 组成一个pac ...
- golang在Windows下Sublime Text开发调试环境的配置
一.前言 近期本人有工作调动,进入了一个全新的领域[golang]服务端开发.在此写下本文,希望给那些没接触过golang开发调试环境及还在犹豫选择那家golang IDE而纠结的朋友们一点点帮助,如 ...
- PHP和Golang使用Thrift1和Thrift2访问Hbase0.96.2(ubuntu12.04)
目录: 一.Thrift1和Thrift2的简要介绍 1) 写在前面 2) Thrift1和Thrift2的区别 二.Thrift0.9.2的安装 1) 安装依赖插件 2) Thrift0.9.2的 ...
- Golang学习--包管理工具glide
上一篇文章中我们已经成功的运行了go的代码,这是我们迈出的最基础的一步. 一个项目通常会依赖很多外部的库,当依赖的库比较多的时候,手工管理就会比较麻烦,这个时候就需要包管理工具出场了,帮你管理好所有依 ...
- C/C++调用Golang 一
C/C++调用Golang 一 (开发环境: 操作系统: windows 7 32位操作系统 C++: visual studio 2010 Golang:go version go1.9 windo ...
- Golang Go Go Go part1:安装及运行
golang 知识图谱 https://www.processon.com/view/link/5a9ba4c8e4b0a9d22eb3bdf0 一.安装 最新版本安装包地址:https://gola ...
- 6行代码解决golang TCP粘包
转自:https://studygolang.com/articles/12483 什么是TCP粘包问题以及为什么会产生TCP粘包,本文不加讨论.本文使用golang的bufio.Scanner来实现 ...
随机推荐
- Hibernate的事务机制
http://www.cnblogs.com/jerryxing/archive/2012/04/24/2468999.html http://www.cnblogs.com/xiaofeilee/p ...
- Tensorboard服务激活
首先确定Tensorflow的具体位置(在Dos环境下,也就是cmd) cd .. cd scripts conda env list activate tensorflow tensorboard ...
- 解析xml文件,遍历输出xml文件中的所有节点, 最终模仿实现struts2框架自动封装参数的功能
程序结构:src文件夹下存放xml文件 该文件内容: <?xml version="1.0" encoding="UTF-8"?> <myst ...
- ie6 bug 收集
1.IE6中奇数宽高的BUG IE6下查看,变成了right:1px的效果了: IE6还有奇数宽高的bug,解决方案就是将外部相对定位的div宽度改成偶数.高度也是一样的查看源码: CSS代码: #o ...
- ASP.NET-AD开发技巧
分享一篇很好的介绍AD属性的文章 AD图片插件 如何给AD添加图片 http://www.doc88.com/p-9542932844870.html AD过滤条件 重命名ou使用user.Renam ...
- C#中的string驻留池
刚开始学习C#的时候,就听说CLR对于String类有一种特别的内存管理机制:有时候,明明声明了两个String类的对象,但是他们偏偏却指向同一个实例.如下: String s1 = "He ...
- C#中的==和Equals
== 和 Equals 简要:==比较栈上的内容,Equals比较堆上的内容 object x = 5, y = 5; Console.WriteLine(x == y); // "==&q ...
- 产品经理---- idea good idea
想问题有不同的思想. 1.先去娶老婆再生娃. 我有啥,我能用这些做啥? [大概这就是泯然众人的思想吧] 2.先做衣服后长肉 我想要做个啥?然后我需要怎么做?怎么做的什么? 好的产品经理我认为是第二种. ...
- 【Java并发编程实战】—–synchronized
在我们的实际应用其中可能常常会遇到这样一个场景:多个线程读或者.写相同的数据,訪问相同的文件等等.对于这样的情况假设我们不加以控制,是非常easy导致错误的. 在java中,为了解决问题,引入临界区概 ...
- CSS初步理解
近期在学习牛腩的时候遇到了网页的制作.挺新奇的.其中涉及到了有关CSS的知识,于是乎自己也就花费两个小时的时间.找了本浅显易懂的书来看了一遍,从宏观上来了解CSS的相关内容.有关CSS的基础知识详见下 ...