我们需要独立的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,互相不干扰。
有疑问加站长微信联系(非本文作者)