您的位置 首页 golang

Golang 多版本管理工具gvm

Golang 多版本管理工具gvm

gvm,即 Go Version Manager,Go 版本管理器,使用 shell 脚本开发,它可以非常轻量的切换 Go 版本。对比其他语言,通常也有类似的工具,如 NodeJS 的 NVM,Python 的 pyenv 等。在使用方法上和 Python 的多版本管理工具 pyenv 非常类似。

其实不借助类似的版本管理工具安装多个版本 Go 也是可以自己手动实现的,做法很简单,就是下载不同的 Golang 安装包,然后放置到独立的目录,使用时将 GOROOT 和 GOPATH 指向对应版本的目录即可完成版本切换。其实 gvm 原理上就是这么做的,只不过通过工具的形式将这些繁杂的手工操作封装起来,使得开发起来更加优雅,不必再为 Go 的安装、版本管理花费更多的心思。下面为 gvm 的工作原理(借用了网上的图):

图片1.png

其中几个主要的目录,如下:

archive             # go 源码bin                 # gvm 可执行文件environments        # 不同环境的环境变量配置scripts             # gvm 的子命令脚本logs                # 日志信息pkgsets             # 每个独立环境 gopath 所在路径

举一反三,之后如果遇到同样的需求,我们可以自己实现。

gvm安装

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

如果想要安装到指定目录:

  1. 先下载安装脚本

wget https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer

  1. 修改安装脚本

把GVM_DEST改为你要安装的目录:

图片2.png
  1. 开始执行脚本安装

sh gvm-installer

  1. 配置gvm的环境变量

以centos7为例,在/etc/profile最后加入:

# go 版本切换工具gvm[[ -s "/opt/gvm/scripts/gvm" ]] && source "/opt/gvm/scripts/gvm"

安装可能遇到的坑:

$ gvm  install go1.12.10Downloading Go source...ERROR: Couldn't download Go source. Check the logs /Users/jim/.gvm/logs/go-download.log

根据提示看 log 报错

Cloning into '/Users/jim/.gvm/archive/go'...error: RPC failed; curl 18 transfer closed with outstanding read data remainingfatal: the remote end hung up unexpectedlyfatal: early EOFfatal: index-pack failed

解决问题:

vim ~/.gvm/scripts/install修改 GO_SOURCE_URL 变量地址为: GO_SOURCE_URL=git://github.com/golang/go

GVM的使用

1.列出当前已安装的 Go 版本

# gvm listgvm gos (installed)   go1.10.8   go1.12.6   system

2.列出当前可以安装的 Go 版本

# gvm listall

3.安装指定版本的 Go

# gvm install go1.12.10

4.切换到指定的 Go 版本

临时切换:gvm use go1.12.6切换指定一个默认版本:gvm use go1.12.6 --default   

切换后查看版本/环境变量:

# go versiongo version go1.12.6 linux/amd64
# go envGOARCH="amd64"GOBIN=""GOCACHE="/root/.cache/go-build"GOEXE=""GOFLAGS=""GOHOSTARCH="amd64"GOHOSTOS="linux"GOOS="linux"GOPATH="/opt/gvm/pkgsets/go1.12.6/global"GOPROXY=""GORACE=""GOROOT="/opt/gvm/gos/go1.12.6"GOTMPDIR=""GOTOOLDIR="/opt/gvm/gos/go1.12.6/pkg/tool/linux_amd64"GCCGO="gccgo"CC="gcc"CXX="g++"CGO_ENABLED="1"GOMOD=""CGO_CFLAGS="-g -O2"CGO_CPPFLAGS=""CGO_CXXFLAGS="-g -O2"CGO_FFLAGS="-g -O2"CGO_LDFLAGS="-g -O2"PKG_CONFIG="pkg-config"GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build027007214=/tmp/go-build -gno-record-gcc-switches"

文章来源:智云一二三科技

文章标题:Golang 多版本管理工具gvm

文章地址:https://www.zhihuclub.com/722.shtml

关于作者: 智云科技

热门文章

评论已关闭

1条评论

  1. Thanks so much Brett. It is indeed a fascinating topic that constantly evolves with the changes to our society and technology

网站地图