Centos7上通过 yum 从 epel 仓库里直接安装的 go 版本还是 1.4.2,从源码编译安装最新的 go 版本比较麻烦,而且开发中有时需要调试在不同编译环境下可能存在的问题,不能忽略使用最新版本是存在某些 bug 的可能性。
Go 的更新速度比较快,2015年8月发布 1.5 版本,2016年2月发布 1.6 版本,2016年8月即将发布 1.7 版本,在性能以及GC方便都在不断优化,及时更新到新版本的 go 很有优势。
Go 版本切换的问题
二进制文件的管理比较简单,通过链接使用不同版本的程序即可,实际上主要是一些环境变量和标准库的设置问题,环境变量主要是 GOPATH
以及 GOROOT
,标准库的话需要在切换 go 版本时也能跟着切换。gvm 实际上就是帮助完成这些配置工作。
安装 gvm
gvm 的项目地址:https://github.com/moovweb/gvm
安装命令:
bash << (curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
如果你使用的是 zsh
的话将前面的 bash
改为 zsh
即可,这条命令主要是下载 gvm 相关的文件,创建所需目录,并且在 .bashrc
或者 .zshrc
中加入
[[ -s "/home/wcl/.gvm/scripts/gvm" ]] && source "/home/wcl/.gvm/scripts/gvm"
使每次登录 shell 时都可以生效。
安装指定 go 版本
gvm install go1.6.3
需要注意这里实际上是先执行
git clone https://go.googlesource.com/go $GVM_ROOT/archive/go
这个网站在墙外。
我们可以通过配置使 git 可以通过 http 代理访问,修改 .gitconfig
文件,加上 http 代理服务器的地址:
[http]
proxy = http://[proxydomain]:[port]
下载成功后,有可能提示编译失败,因为 go1.6.3 需要依赖于 go1.4 来编译,需要设置 GOROOT_BOOTSTRAP
变量。
通过 go env
查看 GOROOT
的路径,通常 GOROOT_BOOTSTRAP
就设置成 GOROOT
,centos7 下需要注意 /usr/lib/golang/bin 下并没有 go
的二进制文件,通过 cp 命令复制一个过去。
之后再次执行 gvm install go1.6.3
即可安装完成。
修改配置信息方便使用
最初测试时发现每次切换 go 版本后都会被修改 GOPATH
变量,而实际上我并不需要这个功能,只是希望用新版本来编译已有的项目,所以我们需要把 ~/.gvm/environments
文件夹下所有 GOPATH
的设置全部删除。
另外还需要将 ~/.zshrc
或者 ~/.bashrc
中的
[[ -s "~/.gvm/scripts/gvm" ]] && source "~/.gvm/scripts/gvm"
移到设置 GOPATH
变量之前,避免登录 shell 之后被修改 GOPATH
变量。
使用
切换到安装好的指定 go 版本
gvm use go1.6.3
通过 go version
可以看到已经是新版本的二进制文件,通过 go env
可以查看 GOROOT
信息,例如我的就是 ~/.gvm/gos/go1.6.3
,这样编译项目时就会在这个目录下找标准库中的文件。
切换到原来的系统版本
gvm use system
查看当前已经安装的所有版本
gvm list
gvm gos (installed)
=> go1.6.3
system
设置某个版本为默认
gvm use go1.6.3 --default
这样设置后,再登录 shell 就默认使用 go1.6.3
的版本,而不是系统原来的版本了。