go多版本管理之gvm

背景
Go 的版本管理可以实现版本的切换,实现不同版本间环境的完全隔离
谈到环境隔离,有很多方案可供选择,如多主机、虚拟机、容器等技术。这些听起来都挺不错,都能实现需求。
多版本切换,主要是不同版本环境变量的隔离。Go 1.10 之前,我们关心的变量有 GOROOT、GOPATH 和 PATH。Go 1.10 之后,GOROOT 已经默认为 go 的当前安装路径,只要考虑 GOPATH 和 PATH 即可。

什么是gvm
gvm,即 Go Version Manager,Go 版本管理器,它可以非常轻量的切换 Go 版本。对比其他语言,通常也有类似的工具,如 NodeJS 的 NVM,Python 的 virtualenv 等。
安装
前提:设备 MacBook Pro

1.如果使用的是bash
bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)

2.如果是mac用户使用的zsh
zsh < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)

3.安装成功后输出显示
Cloning from https://github.com/moovweb/gvm.git to /home/myname/.gvm
which: no go in (/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/myname/.local/bin:/home/myname/bin)
No existing Go versions detected
Installed gvm v1.0.22

Please restart your terminal session or to get started right away run
 `source /home/myname/.gvm/scripts/gvm`
 
4.根据提示 source 即可 比如上面结尾提示的
source /home/myname/.gvm/scripts/gvm
gvm安装go
前提:本机上要要go环境 版本大于 1.4即可
1.gvm install go1.11
gvm 通过从 github 下载源码编译 Go 的安装。而版本则是基于源码中的 tag。因为 1.5 版本及之后,Go 已经实现了自编译,因而要使用 gvm 安装 Go,我们要提前有可用的 Go 环境,等待运行完成即可。

2.如果编译失败 
ERROR: Failed to compile Check the logs at /home/myname/.gvm/logs/go-go1.6-compile.log

可以执行这行命令:export CGO_ENABLED=0

借鉴:https://github.com/moovweb/gvm/issues/197
查看安装成功的go版本
 gvm list

gvm gos (installed)

   go1.11
   go1.12
   go1.13
   go1.13beta1
查看go可用的版本
$ gvm listall

gvm gos (available)

   go1
   go1.0.1
   go1.0.2
   go1.0.3
   go1.1

   ...

   go1.13
   go1.13beta1
   go1.13rc1
   go1.13rc2
选择版本
选择启用的版本就非常简单了。如下:

$ gvm use go1.11 [--default]
启用成功后,可以通过 go version 和 go env 确认下。如果想默认一个版本,加上 --default 设置即可。
gvm目录结构
gvm 是 shell 编写,默认是安装在 $HOME/.gvm/ 目录下。查看下它的目录结构会有助我们了解它的实现。

其中几个主要的目录,如下:

archive             # go 源码
bin                 # gvm 可执行文件
environments        # 不同环境的环境变量配置
scripts             # gvm 的子命令脚本
logs                # 日志信息
pkgsets             # 每个独立环境 gopath 所在路径

gvm命令
Usage: gvm [command]

Description:
  GVM is the Go Version Manager

Commands:
  version    - print the gvm version number
             - 打印 GVM 的版本

  get        - gets the latest code (for debugging)
             - 获取 GVM 最新的代码

  use        - select a go version to use (--default to set permanently)
             - 当前终端环境使用某个 go 版本,加上 --default 代表所有新打开的终端环境都使用这个版本
             - 查看帮助,`gvm use -h`

  diff       - view changes to Go root
             - ???

  help       - display this usage text
             - 显示帮助信息

  implode    - completely remove gvm
             - 彻底删除 gvm 和安装的所有 go 版本和包
             - 如果命令没用,那么删除 `rm -rf ~/.gvm` 目录,去掉 .bashrc 或者 .zshrc 的相关内容即可  

  install    - install go versions
             - 安装某个 go 的版本
             - 可以加上 tag, gvm install [tag],参考 https://github.com/golang/go/tags ,安装一些非稳定版本  
             - 查看帮助,`gvm install - `

  uninstall  - uninstall go versions
             - 卸载某个 go 版本

  cross      - install go cross compilers
             - 安装交叉编译器
             - gvm cross [os] [arch],os = linux/darwin/windows,arch = amd64/386/arm

  linkthis   - link this directory into GOPATH
             - 链接指定目录到 GOPATH 路径
             - 以个人使用来说,只要正确设置 GOPATH 就行,这个命令基本用不到,可以往下看 GOPATH 设置部分
             - 查看帮助,gvm linkthis -h
             - 吐槽,是不是缺了 unlink 命令。。

  list       - list installed go versions
             - 列出安装的 Go 版本

  listall    - list available versions
             - 列出可用的 Go 版本
             - 使用 `--all `,列出所有的 tags 
             - 查看帮助,gvm listall help

  alias      - manage go version aliases
             - 管理 Go 版本别名
             - gvm alias list ,列出所有别名
             - gvm alias create [alias name] [go version name],创建别名
             - gvm alias delete [alias name] ,删除别名
             - 个人感觉也基本用不到

  pkgset     - manage go packages sets
             - gvm pkgset [create/use/delete/list/empty] [pkgset name] 
             - 管理 GOPATHs 环境变量
             - 会在 `~/.gvm/environments` 目录下创建相应的文件
             - 吐槽,没有类似的 unuse 命令 

  pkgenv     - edit the environment for a package set
             - 编辑 pkgset 的环境变量
             - gvm pkgenv [pkgset name] 
  
  借鉴:https://github.com/moovweb/gvm
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值