使用gvm管理多版本golang

Intro

Golang发展迅速,代码迭代非常快,想要调试和梳理项目进程就成了一件相对棘手的事情。偶然间发现了gvm - Go Version Manager,算是找到了调试切换版本的福音。

关于gvm

GVM,类似于ruby 中的RVM,java 中的jenv(国产),可用于方便管理 Go 的版本,它有如下几个主要特性:

  • 管理 Go 的多个版本,包括安装、卸载和指定使用 Go 的某个版本

  • 查看官方所有可用的 Go 版本,同时可以查看本地已安装和默认使用的 Go 版本

  • 管理多个 GOPATH,并可编辑 Go 的环境变量

  • 可将当前目录关联到 GOPATH

  • 可以查看 GOROOT 下的文件差异

Go 版本切换

二进制文件的管理比较简单,通过链接使用不同版本的程序即可,实际上主要是一些环境变量和标准库的设置问题,环境变量主要是 GOPATH 以及 GOROOT,标准库的话需要在切换 go 版本时也能跟着切换。gvm 实际上就是帮助完成这些配置工作。

安装

按照官方文档操作即可

1
2
3
bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
# or
zsh < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)

使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ gvm
Usage: gvm [command]
Description:
GVM is the Go Version Manager
Commands:
version - print the gvm version number
get - gets the latest code (for debugging)
use - select a go version to use (--default to set permanently)
diff - view changes to Go root
help - display this usage text
implode - completely remove gvm
install - install go versions
uninstall - uninstall go versions
cross - install go cross compilers
linkthis - link this directory into GOPATH
list - list installed go versions
listall - list available versions
alias - manage go version aliases
pkgset - manage go packages sets
pkgenv - edit the environment for a package set

Mac下需要这样一把(如果你的环境有问题的话)

1
2
3
xcode-select --install
brew update
brew install mercurial

一般常规的操作是

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 先列一下看支持哪些版本
gvm listall
# 看下自己环境有哪些版本
gvm list
# 安装需要的版本,比如go1.8.3,加--default代表每次再进terminal时默认使用这个版本
gvm install go1.8.3 [--default]
# 然后看下是否成功
go version
go env
# 如果不需要gvm的环境变量,则需要到GVM_ROOT/environments下面去删除
# 注意是清空文件
> $GVM_ROOT/environments/go1.8.3
# 如果需要每次打开terminal都生效的话,以下命令加入到bashrc/zshrc,注意要加在GOPATH/GOROOT的setting之前(如果希望环境变量不被修改的话)
source /Users/chentao/.gvm/scripts/gvm

几点注意

  • 在 Linux 下安装 GVM,需要安装相关依赖,详情见官网说明
  • GVM 官方显示没对 Windows 做支持,考虑到 Windows 不是程序员的标配吧(有同学回复用 git-windows客户端,自带bash功能,可以自行尝试安装下)。
  • GVM 安装新版本之后,Go 环境变量会重新设置,为了节约磁盘空间和时间,建议把之前版本的 GOPATH 内容移动到新版本对应的 GOPATH 目录下,相关路径可以通过 go env 获取
  • 在同一版本下,用 gvm pkgset 创建多个 GOPATH,可能会占用你比较大的磁盘空间
  • 使用 gvm implode 需谨慎
  • GVM 是用 shell 编写