GVM管理Go版本
1.为什么要安装GVM
1.1什么是GVM
GVM是一个golang虚拟环境配置工具,其允许一台机器上安装多个golang版本,gvm是第三方开发的Go多版本管理工具,类似ruby里面的rvm工具。使用起来相当的方便。它是以shell脚本开发的工具,同时兼容bash和zsh,用法和ruby的rvm很像,能做到Go语言版本的切换以及GOPATH的修改。
1.2Go的项目隔离
在我们进行一个项目的开发时,总是希望一个项目独立使用一个workspace,用于隔离各个项目的依赖环境。以ruby项目为例,如果公用workspace,会导致gemset公用,可能在多项目开发的时候,难以隔离各个项目不同的gem,在开发以及运行时出现预料外的问题,所以一般的ruby项目,都会在项目根目录下,使用.ruby-version以及.ruby-gemset来规定当前项目的ruby版本以及gemset,配合rvm或rbenv等版本工具,使ruby项目能使用独立的workspace。
比照ruby语言,Go语言在使用中也面临了2个问题:
- 1.语言版本进步很快,需要对应项目进行语言版本管理。
- 2.第三方库的版本隔离
要解决问题1,我们需要一个工具来安装多个Go版本,并提供方便的切换功能。
而对于问题2,我们知道Go使用GOPATH这个环境变量来管理编译时的源代码路径,所以第三方库也是下载在GOPATH下,并且我们的源代码也需要处于GOPATH下。于是就需要一个工具,能根据方便的设置GOPATH。
在网上搜寻后,发现了 gvm 这个好用的工具。这个以shell脚本开发的工具,同时兼容bash和zsh,用法和ruby的rvm很像,能做到Go语言版本的切换以及GOPATH的修改。
2.安装GVM
执行命令:bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
查看版本:
查看版本失败,执行命令:yum install bison
再次查看版本,执行命令:gvm version
3.GVM的使用
3.1查看当前机器的Go环境
3.2安装不同版本的Go,方便切换使用
3.3切换Go版本
- 使用Go1.5
- 使用Go1.8
- 使用Go1.9
3.4使用GVM创建项目的workspace
我们来新建一个项目,名字叫pprof。项目目录放在~/goproj/pprof下。
- mkdir -p ~/goproj/pprof
- cd ~/goproj/pprof
- gvm pkgset create --local
- gvm pkgset use --local
- mkdir src
在上面的命令中,我们创建了项目的目录,进入目录后,使用gvm pkgset create -local命令,将目录设为一个local的pkgset,然后通过gvm pkgset use --local来使用它,这时,当前的环境变量的GOPATH为:
$HOME/goproj/pprof:$HOME/goproj/pprof/.gvm_local/pkgsets/system/local:$HOME/.gvm/pkgsets/system/global
可以看到,GOPATH已经被设置为pprof这个项目目录了,这时我们执行go get命令来下载第三方库的时候,会默认下载到$HOME/goproj/pprof/src目录下。
接下来,我们来创建真正用于代码管理的目录:
- mkdir -p ~/goproj/pprof/src/pprof
- cd ~/goproj/pprof/src/pprof
- git init
这里,我们用git来管理项目的软件版本。现在,我们可以在~/goproj/pprof/src/pprof这个目录下来编写代码了。
3.5最终效果
在不同的项目目录下使用的go版本不同,并且隔离各个项目的依赖环境。
总结
通过使用gvm,我们能够根据项目切换Go语言版本以及切换GOPATH目录。这2大功能,帮助我们给每一个Go项目提供独立的workspace,互相不干扰。
GVM管理Go版本的更多相关文章
- 使用 nvm 管理不同版本的 node 与 npm
补充说明:Mac 下通过 brew install nvm 所安装的 nvm ,由于安装路径不同,无法正确启用.建议使用 brew uninstall nvm 卸载掉之后,通过本文的方案重新安装一次. ...
- 怎么使用git来管理项目版本?
怎么使用git来管理项目版本和存放代码? 作者:rongfangliu 转载请注明出处:http://www.cnblogs.com/rongfangliu/p/howuseGit.html 工具: ...
- 使用tortoise git管理gitolite版本库
gitolite-admin是用于管理git版本库的版本库,将其从服务器上clone下来. 使用tortoise git clone的时候需要指定私钥,私钥的格式是ppk的,需要使用putty的PUT ...
- pyenv简介——Debian/Ubuntu中管理多版本Python
pyenv简介——Debian/Ubuntu中管理多版本Python MAY 21ST, 2016 12:00 AM | COMMENTS pyenv是管理Python版本的工具,它支持在多个Pyth ...
- SQL Server中TempDB管理(版本存储区的一个example)
原文:SQL Server中TempDB管理(版本存储区的一个example) 原文来自: http://blogs.msdn.com/b/sqlserverstorageengine/archive ...
- 让 Homebrew 走代理更新 + brew 管理 node 版本
0.前言 环境:MacOS 背景:整理下今天所做的配置. 1. 让 Homebrew 走代理更新 brew update 就卡住了,即使开了 shadowsocks 也不行.因为 shadowsock ...
- 使用pyenv与pyenv-virtualenv管理Python版本与虚拟环境
在上一篇博客中,我介绍了如何在ubutnu 18.04中安装pyenv.这一次我将介绍如何使用pyenv与pyenv-virtualenv管理Python版本与虚拟环境. 0.相关命令 首先使用pye ...
- windows 安装nvm步骤(shi'yongnvm-windows管理node版本):
瞎几把前言:mac上可以用n来管理node版本,私以为n很好用.家里的win7台式机一直没有安装过任何管理工具,今天来给家里电脑安装一下nvw-windows,一个用于windows系统的node版本 ...
- nvm管理不同版本的node和npm
写在前面 nvm(nodejs version manager)是nodejs的管理工具,如果你需要快速更新node版本,并且不覆盖之前的版本:或者想要在不同的node版本之间进行切换:使用nvm来安 ...
随机推荐
- Maximum sum-动态规划
A - Maximum sum Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Sub ...
- MBA人物俞洪敏:亿万富翁的生活表
我的智商非常一般,就是比别人勤奋.我的脑袋不属于特别笨的那种,但肯定也不是顶尖聪明的类型.在北大的50个同学当中,我的智商应该属于中下水平,这说明我不是顶尖高智商. 我的勤奋一般人跟不上.我平均每天工 ...
- web.xml中url-pattern匹配规则
小知识 一般的URL组成 URL = 服务器地址 + RequestURI 例如URI:http://localhost:8080/practice/main [http://localhost:80 ...
- 解决google登录界面input输入框颜色不正确问题
加入以下样式: input:-webkit-autofill { -webkit-box-shadow: 0 0 0px 1000px #e2e2e2 inset !important; }
- laravel学习之路2: jwt集成
"tymon/jwt-auth": "^1.0@dev", 执行 composer update 'providers' => [ .... Tymon\ ...
- java多线程实现复制大文件
有些开发的时候我们经常遇到这样一个问题,对大文件的处理.比如:日志文件.那么十几G的大文件.我们应该如何复制呢? 还有就是希望从本地和远程复制文件,文件都很大,10G级的如何办呢? 在这里我告诉你们, ...
- postman 测试API - 获取/调用 token
1.使用全局变量保存token 2.再调用 参考文章 http://www.jianshu.com/p/13c8017bb5c8 https://testerhome.com/topics/6555
- Coursera machine learning 第二周 quiz 答案 Octave/Matlab Tutorial
https://www.coursera.org/learn/machine-learning/exam/dbM1J/octave-matlab-tutorial Octave Tutorial 5 ...
- JQuery基础知识--方便忘记时查看
第一次写博客,不多说废话,实用为先.如有不对,请多指正. JQuery api 第一步引入JQuery库. <script type="text/javascript" sr ...
- hihoCoder#1037 : 数字三角形(DP)
[题目链接]:click here~~ 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 问题描写叙述 小Hi和小Ho在经历了螃蟹先生的任务之后被奖励了一次出国旅游的机会,于是他 ...