Go 的版本管理可以实现版本的切换,实现不同版本间环境的完全隔离
谈到环境隔离,有很多方案可供选择,如多主机、虚拟机、容器等技术。这些听起来都挺不错,都能实现需求。
多版本切换,主要是不同版本环境变量的隔离。Go 1.10 之前,我们关心的变量有 GOROOT、GOPATH 和 PATH。Go 1.10 之后,GOROOT 已经默认为 go 的当前安装路径,只要考虑 GOPATH 和 PATH 即可。
什么是gvm
gvm,即 Go Version Manager,Go 版本管理器,它可以非常轻量的切换 Go 版本。对比其他语言,通常也有类似的工具,如 NodeJS 的 NVM,Python 的 virtualenv 等。
安装
前提:设备 MacBook Pro
1.如果使用的是bash
bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
2.如果是mac用户使用的zsh
zsh < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
3.安装成功后输出显示
Cloning from https://github.com/moovweb/gvm.git to /home/myname/.gvm
which: no go in (/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/myname/.local/bin:/home/myname/bin)
No existing Go versions detected
Installed gvm v1.0.22
Please restart your terminal session or to get started right away run
`source /home/myname/.gvm/scripts/gvm`
4.根据提示 source 即可 比如上面结尾提示的
source /home/myname/.gvm/scripts/gvm
gvm安装go
前提:本机上要要go环境 版本大于 1.4即可
1.gvm install go1.11
gvm 通过从 github 下载源码编译 Go 的安装。而版本则是基于源码中的 tag。因为 1.5 版本及之后,Go 已经实现了自编译,因而要使用 gvm 安装 Go,我们要提前有可用的 Go 环境,等待运行完成即可。
2.如果编译失败
ERROR: Failed to compile Check the logs at /home/myname/.gvm/logs/go-go1.6-compile.log
可以执行这行命令:export CGO_ENABLED=0
借鉴:https://github.com/moovweb/gvm/issues/197
查看安装成功的go版本
gvm list
gvm gos (installed)
go1.11
go1.12
go1.13
go1.13beta1
Usage: gvm [command]
Description:
GVM is the Go Version Manager
Commands:
version - print the gvm version number
- 打印 GVM 的版本
get - gets the latest code (for debugging)
- 获取 GVM 最新的代码
use - select a go version to use (--default to set permanently)
- 当前终端环境使用某个 go 版本,加上 --default 代表所有新打开的终端环境都使用这个版本
- 查看帮助,`gvm use -h`
diff - view changes to Go root
- ???
help - display this usage text
- 显示帮助信息
implode - completely remove gvm
- 彻底删除 gvm 和安装的所有 go 版本和包
- 如果命令没用,那么删除 `rm -rf ~/.gvm` 目录,去掉 .bashrc 或者 .zshrc 的相关内容即可
install - install go versions
- 安装某个 go 的版本
- 可以加上 tag, gvm install [tag],参考 https://github.com/golang/go/tags ,安装一些非稳定版本
- 查看帮助,`gvm install - `
uninstall - uninstall go versions
- 卸载某个 go 版本
cross - install go cross compilers
- 安装交叉编译器
- gvm cross [os] [arch],os = linux/darwin/windows,arch = amd64/386/arm
linkthis - link this directory into GOPATH
- 链接指定目录到 GOPATH 路径
- 以个人使用来说,只要正确设置 GOPATH 就行,这个命令基本用不到,可以往下看 GOPATH 设置部分
- 查看帮助,gvm linkthis -h
- 吐槽,是不是缺了 unlink 命令。。
list - list installed go versions
- 列出安装的 Go 版本
listall - list available versions
- 列出可用的 Go 版本
- 使用 `--all `,列出所有的 tags
- 查看帮助,gvm listall help
alias - manage go version aliases
- 管理 Go 版本别名
- gvm alias list ,列出所有别名
- gvm alias create [alias name] [go version name],创建别名
- gvm alias delete [alias name] ,删除别名
- 个人感觉也基本用不到
pkgset - manage go packages sets
- gvm pkgset [create/use/delete/list/empty] [pkgset name]
- 管理 GOPATHs 环境变量
- 会在 `~/.gvm/environments` 目录下创建相应的文件
- 吐槽,没有类似的 unuse 命令
pkgenv - edit the environment for a package set
- 编辑 pkgset 的环境变量
- gvm pkgenv [pkgset name]
借鉴:https://github.com/moovweb/gvm