用gvm管理Go项目的workspace

LYY · · 8365 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

我们需要独立的workspace

在我们进行一个项目的开发时,总是希望一个项目独立使用一个workspace,用于隔离各个项目的依赖环境。以ruby项目为例,如果公用workspace,会导致gemset公用,可能在多项目开发的时候,难以隔离各个项目不同的gem,在开发以及运行时出现预料外的问题,所以一般的ruby项目,都会在项目根目录下,使用.ruby-version以及.ruby-gemset来规定当前项目的ruby版本以及gemset,配合rvm或rbenv等版本工具,使ruby项目能使用独立的workspace。

那么,Go语言的项目,能不能这么做呢?

Go的项目隔离

比照ruby语言,Go语言在使用中也面临了2个问题:

1.语言版本进步很快,需要对应项目进行语言版本管理。
2.第三方库的版本隔离

要解决问题1,我们需要一个工具来安装多个Go版本,并提供方便的切换功能。

而对于问题2,我们知道Go使用GOPATH这个环境变量来管理编译时的源代码路径,所以第三方库也是下载在GOPATH下,并且我们的源代码也需要处于GOPATH下。于是就需要一个工具,能根据方便的设置GOPATH。

在网上搜寻后,发现了 gvm 这个好用的工具。这个以shell脚本开发的工具,同时兼容bash和zsh,用法和ruby的rvm很像,能做到Go语言版本的切换以及GOPATH的修改。

通过gvm管理workspace

安装gvm

github地址:https://github.com/moovweb/gvm

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

如果用的是zsh,将 bash 替换为 zsh。

安装Go

这里我们用Go 1.4.2版本为例,运行下面的命令:

gvm install go1.4.2  

需要使用这个版本,执行gvm use go1.4.2,如果需要将这个版本作为默认版本,我们可以执行gvm use go1.4.2 --default

创建项目的workspace

我们来新建一个项目,名字叫baozou。项目目录放在~/goproj/下。

mkdir -p ~/goproj/baozou  
cd ~/goproj/baozou  
gvm pkgset create --local  
gvm pkgset use --local  
mkdir src  

在上面的命令中,我们创建了baozou项目的目录,进入目录后,使用gvm pkgset create -local命令,将目录设为一个local的pkgset,然后通过gvm pkgset use --local来使用它,这时,当前的环境变量的GOPATH为:

$HOME/goproj/baozou:$HOME/goproj/baozou/.gvm_local/pkgsets/system/local:$HOME/.gvm/pkgsets/system/global

可以看到,GOPATH已经被设置为baozou这个项目目录了,这时我们执行go get命令来下载第三方库的时候,会默认下载到$HOME/goproj/baozou/src目录下。

接下来,我们来创建真正用于代码管理的目录:

mkdir -p ~/goproj/baozou/src/baozou  
cd ~/goproj/baozou/src/baozou  
git init  

这里,我们用git来管理项目的软件版本。现在,我们可以在~/goproj/baozou/src/baozou这个目录下来编写代码了。

总结

通过使用gvm,我们能够根据项目切换Go语言版本以及切换GOPATH目录。这2大功能,帮助我们给每一个Go项目提供独立的workspace,互相不干扰。


有疑问加站长微信联系(非本文作者)

本文来自:暴走技术博客

感谢作者:LYY

查看原文:用gvm管理Go项目的workspace

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

8365 次点击  
加入收藏 微博
上一篇:GO备忘录
下一篇:HTTP Payload
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传