«

Go 语言多版本安装及管理利器 - GVM

gophers

Go 的环境安装和配置并不复杂,首先推荐看看官网的安装教程,介绍的非常全面详细。

如果想看中文,并拓展这方面的知识,推荐看《Go Web 编程》这本开源书籍中的第一章:Go 环境配置,作者 astaxie 已经讲解的非常全面直观。

但如果你有 Go 多版本的需求(比如新老版本共存),如果你想更简化 Go 环境配置(省去GOPATH、GOROOT等的配置),你还希望它支持跨平台(支持Mac和Linux),那么我特别推荐这款 Go 第三方工具:GVM—— Go 语言多版本安装及管理利器。

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

尤其是前三个特性,非常实用,接下来就详细的介绍一下这款工具的安装和常用方式。

安装 GVM

一行脚本的事情:

bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)  

需要注意的是,如果本地用的是 zsh,直接替换 bash 即可。

使用 GVM

直接输入 gvm,查看使用帮助

☁  ~  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

帮助简单易懂,这里介绍其中其中几个常用的命令。

展示 Go 版本

展示当前所有可以安装的 Go 版本,最新的是 go1.7.3

☁  ~  gvm listall

gvm gos (available)

   go1
   go1.0.1
   go1.0.2
   go1.0.3
   ...
   go1.7.3

展示本地安装好的 Go 版本,箭头表示默认使用的版本,我这里是 go1.7.3

☁  ~  gvm list

gvm gos (installed)

   go1.4
   go1.5
   go1.6.2
   go1.6.3
   go1.7
   go1.7.1
=> go1.7.3

对比本地没有的版本,我们就可以在线安装你需要的版本了。

安装指定的 Go 版本

如果是 go 1.5- 的版本,直接安装:

gvm install go1.4  
gvm use go1.4 [--default]  

它背后做的事情是先把源码下载下来,再用 C 做编译。

所以如果是 go 1.5+ 的版本,因为至此 Go 实现了自举(用 Go 编译 Go),就需要用到 Go 1.4 来做编译

# -B 表示只安装二进制包
gvm install go1.4 -B  
gvm use go1.4  
export GOROOT_BOOTSTRAP=$GOROOT  
gvm install go1.7.3  

安装好之后,指定默认使用这个版本,加上 --default 即可,省去每次敲 gvm use

gvm use go1.7.3 --default  

这个时候查看 go 环境变量:

☁  ~  go env
GOARCH="amd64"  
GOBIN=""  
GOEXE=""  
GOHOSTARCH="amd64"  
GOHOSTOS="darwin"  
GOOS="darwin"  
GOPATH="/Users/bingo/.gvm/pkgsets/go1.7.3/global"  
GORACE=""  
GOROOT="/Users/bingo/.gvm/gos/go1.7.3"  
GOTOOLDIR="/Users/bingo/.gvm/gos/go1.7.3/pkg/tool/darwin_amd64"  
CC="clang"  
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/g_/tjrlnbjd4sl56gp0p2nk3j5h0000gn/T/go-build385345518=/tmp/go-build -gno-record-gcc-switches -fno-common"  
CXX="clang++"  
CGO_ENABLED="1"  

全部帮你配置好了,看起来非常赞!

管理多个 GOPATH

GVM 还一个很实用的功能,可以管理多个 GOPATH(Go package),是通过 gvm pkgset 命令

☁  ~  gvm pkgset
= gvm pkgset

* http://github.com/moovweb/gvm

== DESCRIPTION:

GVM pkgset is used to manage various Go packages

== Usage

  gvm pkgset Command

== Command

  create     - create a new package set
  delete     - delete a package set
  use        - select where gb and goinstall target and link
  empty      - remove all code and compiled binaries from package set
  list       - list installed go packages

说明的很详细,使用方法和 gvm 也类似,就不赘述

卸载

如果只是想卸载某个安装好的 Go 版本:

gvm uninstall go1.7.3  

如果你想完全卸载掉 GVM 和 所有安装的 Go 版本(需谨慎):

gvm implode  

注意和不足

分享