Go 语言多版本安装及管理利器 - GVM
Go 语言多版本安装及管理利器 - GVM
Go 的环境安装和配置并不复杂,首先推荐看看官网的安装教程,介绍的非常全面详细。
如果想看中文,并拓展这方面的知识,推荐看《Go Web 编程》这本开源书籍中的第一章:Go 环境配置,作者 astaxie 已经讲解的非常全面直观。
但如果你有 Go 多版本的需求(比如新老版本共存),如果你想更简化 Go 环境配置(省去GOPATH、GOROOT等的配置),你还希望它支持跨平台(支持Mac和Linux),那么我特别推荐这款 Go 第三方工具:GVM
—— Go 语言多版本安装及管理利器。
GVM,类似于ruby 中的 RVM,java 中的 jenv(国产),可用于方便管理 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
即可。
二、使用 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
七、注意和不足
- 在 Linux 下安装 GVM,需要安装相关依赖,详情见官网说明
- GVM 官方显示没对 Windows 做支持,考虑到 Windows 不是程序员的标配吧( git-windows客户端,自带 bash 功能,可以尝试安装下)。
- GVM 安装新版本之后,Go 环境变量会重新设置,为了节约磁盘空间和时间,建议把之前版本的 GOPATH 内容移动到新版本对应的 GOPATH 目录下,相关路径可以通过
go env
获取 - 在同一版本下,用
gvm pkgset
创建多个 GOPATH,可能会占用你比较大的磁盘空间 - 使用
gvm implode
需谨慎 - GVM 是用
shell
编写
https://www.imyangyong.com/blog/categories/