在开发或者自己学习Go的过程中,可能会对比不同版本Go语言的特性、性能等,特别是可能想提前用上tip版本的一些特性,这个时候,系统中可能需要多个Go版本。那么该如何处理这个问题呢?
一般地,我觉得有两种处理方法。
比如 Go 版本(go1.3)安装在 /usr/local/go 目录中,并配置了 GOROOT(GOROOT=/usr/local/go)和 PATH (PATH=$PATH:$GOROOT/bin),这时,我们想安装一个Go1.2版本,比如放在了 /usr/local/go1.2 中。
通常,我们都在使用 Go1.3,但某个时候,我们想使用 Go1.2,这个时候,可以将 /usr/local/go 改名为 /usr/local/go1.3,同时将 /usr/local/go1.2 改名为 /usr/local/go,这样,Go版本就变成了 1.2 了。有其他版本时,一样处理。
最早时,Go需要设置不少环境变量,比如:GOARCH/GOOS/GOBIN/GOROOT 等,特别是GOBIN,网上有不少旧文章讲安装 Go 时,都提到设置这个环境变量,而实际上,如果你设置了GOBIN,使用 go install 时会出现可执行文件被安装到了 GOBIN 目录中,而不是 GOPATH/bin 目录中。
一般地,Go1.0 之后,只需要设置 GOROOT 和 GOPATH 就可以了,我们通过 go env 命令能够看到Go相关的环境变量:
GOARCH=”amd64″
GOBIN=””
GOCHAR=”6″
GOEXE=””
GOHOSTARCH=”amd64″
GOHOSTOS=”linux”
GOOS=”linux”
GOPATH=”/root/golang/myproject/”
GORACE=””
GOROOT=”/usr/local/go”
GOTOOLDIR=”/usr/local/go/pkg/tool/linux_amd64″
CC=”gcc”
GOGCCFLAGS=”-fPIC -m64 -pthread -fmessage-length=0″
CXX=”g++”
CGO_ENABLED=”1″
也就是说,虽然,我们只设置了GOROOT和GOPATH,但实际上,很多其他环境变量也是有值的。实际上,在 《分析源码安装Go的过程》 一文中提到,make.bash 脚本会 export GOROOT,也就是说在安装时,并不需要自己设置 GOROOT,那么安装完成之后呢?可以试试在安装完成之后,不设置GOROOT,看看 go env 的输出,你会发现,GOROOT已经正确设置了。
可见,即使没有主动设置GOROOT,实际上 Go 也能知道 GOROOT 指向哪里,也就是说,主动设置 GOROOT 会覆盖默认的 GOROOT 设置。既然不设置 GOROOT,Go也能正确的找到 Go 安装目录,那么我们为啥还要设置呢?(可能设置的另一个理由是,设置 PATH 时,可以通过 $GOROOT 这种方式引入,改变 GOROOT 就可以起到改变 PATH 的目的)
这样一来,我们安装多个版本的Go,各个版本的GOROOT总是能够指向自己的目录,基于这一点,我们可以做到同时使用多版本。
当多版本时,我们可以将主版本的 bin 目录加入 PATH,以方便直接使用 go 命令。对于其他版本,我们可以通过建立软连接的方式来使用,比如:ln -s /usr/local/go1.2/bin/go /usr/bin/go1.2 (windows 下可以考虑直接改名)(注:Go1.4 将支持 Windows 下创建符号链接,这样可以用 Go 实现在Windows下建立符号链接,而不是改名,详见:《【Go1.4】主要改动》)
综上,选择哪种方式根据你的喜好。个人觉得方法2方便些。配置了一次后,直接就可以使用了,而方法1总是得修改目录。
命令行 go/go1.0/go1.1/go1.2/go1.3/go_tip 分别使用对应的Go版本。(其中,go 使用了 最新稳定版)
Windows 下的 ln 源码下载
1)2014-08-13 初始版本
2)2014-08-15 增加 我的多版本配置 部分