热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

go学习(八)——GVM管理Go版本

1.为什么要安装GVM1.1什么是GVMGVM是一个golang虚拟环境配置工具,其允许一台机器上安装多个golang版本,gvm是第三方开发的Go多版本管理工具,类似ruby里
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,互相不干扰。


参考链接:http://www.yaozihao.cn/2017/03/08/linux-使用gvm安装并管理go版本/

                  https://studygolang.com/articles/4788


推荐阅读
  • Centos7安装高版本zshzim框架安装powerlevel10k
    1.安装高版本zsh1.1卸载低版本zshsudoyumremovezsh-y1.2下载源码源码:https:zsh.sourceforge.ioArcsour ... [详细]
  • 本文介绍了Linux Shell中括号和整数扩展的使用方法,包括命令组、命令替换、初始化数组以及算术表达式和逻辑判断的相关内容。括号中的命令将会在新开的子shell中顺序执行,括号中的变量不能被脚本余下的部分使用。命令替换可以用于将命令的标准输出作为另一个命令的输入。括号中的运算符和表达式符合C语言运算规则,可以用在整数扩展中进行算术计算和逻辑判断。 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • 其实之前也有下载过完整的android源码,但是从来没有对这个做过一些总结,在加上最近需要经常去看,索性就在从新下载,编译一下,其实这些东西官网上面都有。http:sou ... [详细]
  • 为PHP5安装curl和gd
    2019独角兽企业重金招聘Python工程师标准一、查看php5是否安装了curl:1在web服务器目录(Ubuntu下通常为varwww ... [详细]
  • Linux 命令行获取天气
    目标:使用Linux命令行显示天气预报。发行版:所有Linux发行版。要求:能连上因特网的Linux难度:容易约定& ... [详细]
  • 微信web开发工具调试h5对于开发人员而言,时间始终是稀缺资源。从苛刻的截止日期到多个项目,再到意外的要求,我们对时间的需求不断。因此&# ... [详细]
  • Autoware 进行 Robosense16 线雷达与 ZED 双目相机联合标定!
    项目要标定雷达和相机,这里记录下我标定过程,用的速腾Robosense-16线雷达和ZED双目相机。一、编译安装Autoware-1.10.0我没有安装最新版本的Autoware, ... [详细]
  • brew结合iTerm2花式玩转MacOS软件管理的终端指令
    brew结合iTerm2花式玩转MacOS软件管理的终端指令-1.背景需求  刚拿到新的Mac电脑工作时,linux上很多常用指令是没有的安装的,如wget,git,telnet ... [详细]
  • 本文目标是构建随处可用的内核开发环境,用于Linux内核调度器的研究。开发环境的开发套件由docker,ubuntu14.04,qemu,vim,zsh等构成。按照该开发环境的套件 ... [详细]
  • MNN windows
    参考:编译转换工具:https:blog.csdn.netjacke121articledetails106407234解决flatc.exe找不到 ... [详细]
  • 本文总结了Linux下多线程执行shell脚本的4种方法,包括切换到工作目录执行、使用绝对路径执行、直接使用bash或sh执行。同时介绍了为什么需要加上"./"来执行脚本的原因。 ... [详细]
  • 这篇文章给大家介绍怎么从源码启动和编译IoTSharp ,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。IoTSharp项目是 ... [详细]
  • Docker安装Rabbitmq(配合宝塔)
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Docker安装Rabbitmq(配合宝塔)相关的知识,希望对你有一定的参考价值。一、事前准备 ... [详细]
  • until命令和while命令类似,while能实现的脚本unt ... [详细]
author-avatar
博瑞恩张更新
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有