Gvm 是 Go 语言多版本安装及管理的一个工具,类似于 Ruby 中的 RVM,Java 中的 Jenv(国产),Python 中的 virtualenv,Nodejs 中的 Nvm;可用于方便管理 Go 的版本,它有如下几个主要特性:
- 管理 Go 的多个版本,包括安装、卸载和指定使用 Go 的某个版本
- 查看官方所有可用的 Go 版本,同时可以查看本地已安装和默认使用的 Go 版本
- 管理多个 GOPATH,并可编辑 Go 的环境变量
- 可将当前目录关联到 GOPATH
- 可以查看 GOROOT 下的文件差异
尤其是前三个特性,非常实用,接下来就详细的介绍一下这款工具的安装和常用方式;
安装 GVM
bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
注意:如果本地用的是 zsh,将 bash 替换 zsh 即可;
使用 GVM
命令行直接输入 gvm,查看使用帮助:
GVM 命令
gvm install [goversion] # 安装指定版本,e.g.
gvm install go1.4
gvm use [goversion] [--default] # 指定当前使用的 Node.js 版本,e.g.gvm use v6.10.0
,--default
参数设置默认使用版本
gvm list # 查看本地安装好的 Go 版本,箭头表示默认使用的版本
gvm listall # 查看当前所有可以安装的 Go 版本
gvm pkgset # GVM 可以管理多个 GOPATH(Go package)
go env # 查看 go 环境变量
gvm uninstall [goversion] # 卸载指定版本,e.g.gvm uninstall go1.4
gvm implode # 完全卸载掉 GVM 和所有安装的 Go 版本
安装指定的 Go 版本
如果是 go1.5 以下的版本,直接安装:
gvm install go1.4
这条命名背后做的事情是先把源码下载下来,再用 C 做编译;
如果是 go1.5+ 的版本,需要 Go 实现自举(用 Go 编译 Go),就需要先安装 go1.4 版本然后再来做编译;
# -B 表示只安装二进制包
gvm install go1.4 -B
gvm use go1.4
gvm install go1.11.1
安装好之后,指定默认使用这个版本,加上 --default
即可,省去每次敲 gvm use
gvm use go1.11.1 --default
注意和不足
- 在 Linux 下安装 GVM,需要安装相关依赖,详情见官网说明
- GVM 官方显示没对 Windows 做支持,考虑到 Windows 不是程序员的标配吧(有同学回复用 git-windows 客户端,自带bash 功能,可以自行尝试安装下)。
- GVM 安装新版本之后,Go 环境变量会重新设置,为了节约磁盘空间和时间,建议把之前版本的 GOPATH 内容移动到新版本对应的 GOPATH 目录下,相关路径可以通过 go env 获取
- 在同一版本下,用 gvm pkgset 创建多个 GOPATH,可能会占用你比较大的磁盘空间
- 使用 gvm implode 需谨慎
- GVM 是用 shell 编写