使用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,安装程序脚本为:

  1. 检查一些依赖
  2. 克隆GVM存储库
  3. 使用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 一样容易,其中是gvm listall命令返回的版本之一。

假设您正在使用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使这一切变得轻而易举。

dispath No query results for model [App\\Models
DNS迭代查询和递归查询的区别?
Tags: