使用GVM管理多个版本的Go
Go Version Manager(GVM)是用于管理Go环境的开源工具。它支持安装Go的多个版本,并使用GVM“ pkgsets”在每个项目中管理模块。GVM 由Josh Bussdieker最初开发,GVM(类似于Ruby的RVM)使您可以为每个项目或项目组创建一个开发环境,将不同的Go版本和程序包依赖项隔离开来,以提供更大的灵活性并防止版本问题。
有几种管理Go软件包的选项,包括直接内置在Go中的Go 1.11模块。我发现GVM既简单又直观,即使不使用它来管理软件包,我仍然会使用它来管理Go版本。
安装GVM
bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
尽管越来越多地采用这种安装方法,但在执行安装前请先了解安装程序的工作仍然是一种好习惯。对于GVM,安装程序脚本为:
- 检查一些依赖
- 克隆GVM存储库
- 使用Shell脚本执行以下操作:
- 安装Go
- 管理GOPATH环境
- 在您的bashrc,zshrc或个人资料中添加一行
如果要仔细检查它在做什么,则可以克隆该存储库并查看Shell脚本,然后运行./binscripts/gvm-installer以使用本地脚本进行设置。
注意:由于可以使用GVM下载和编译新的Go版本,因此存在一些预期的依赖项,例如Make,Git和Curl。您可以在GVM的README中找到完整的发行列表。
使用GVM安装和管理Go版本
安装GVM后,您就可以开始使用它来安装和管理不同版本的Go。该GVM listall命令显示了围棋的可用版本可以下载并编译:
$ gvm listall
$ gvm listall gvm
gvm gos (available)
go1
go1.0.1
go1.0.2
go1.0.3
安装特定的Go版本就像gvm install
假设您正在使用Go版本1.12.8的项目中工作。您可以使用gvm install go1.12.8安装它:
$ gvm install go1.12.8正在
安装go1.12.8 ...
*正在编译...
go1.12.8已成功安装!
输入gvm list,您会看到Go版本1.12.8与系统Go版本(使用操作系统的软件包管理器打包在一起的版本)一起安装:
$ gvm列表
gvm gos (已安装)
go1.12.8
= >系统
使用GVM pkgset
Go开箱即用,具有出色且令人沮丧的管理软件包和模块的方式。默认情况下,如果您获得软件包,则将其下载到$ GOPATH中的src和pkg目录中;然后可以使用import将其包含在Go程序中。这使得获取软件包(特别是对于没有特权的用户)变得容易,而无需sudo或root特权(就像Python中的pip install –user一样)。但是,要权衡的是在不同项目中管理同一软件包的不同版本的困难。
有很多方法可以尝试解决或缓解该问题,包括实验性Go模块(Go v1.11中添加了初步支持)和go dep(“官方实验”以及正在进行的Go Module替代方案)。在发现GVM之前,我将在自己的Docker容器中构建和测试Go项目以确保隔离。
GVM通过使用“ pkgsets”将项目的新目录附加到安装的Go版本的默认$ GOPATH上,优雅地完成了项目之间的软件包管理和隔离,就像$ PATH在Unix / Linux系统上工作一样。
GVM仍在使用Go的系统版本,由其旁边的=>符号表示。您可以通过gvm use命令将环境切换为使用新安装的go1.12.8 :
GVM使Go管理变得轻而易举
GVM是管理Go版本和软件包的一种直观且非侵入性的方式。它可以单独使用,也可以与其他Go模块管理技术结合使用,并利用GVM的Go版本管理功能。通过Go版本和程序包依赖项隔离项目可以使开发更加容易,并减少管理版本冲突的复杂性,而GVM使这一切变得轻而易举。