使用多版本管理工具 g 管理多版本的Go语言

没错,这个工具的名称就是g,就像go语言的语法那样简洁。

g是一个开源项目,目前在github上已经有1.3k的关注人数了。可以在Linux、macOS、Windows下以命令行方式运行,可一键实现多版本go环境的安装、切换、移除等管理操作。经过与go的其他多版本工具的对比体验,没有比它更好用的go多版本管理工具了。

我想起其他语言也有类似的多版本管理工具,比如

  • java的多版本管理工具jenv
  • php的多版本管理工具phpen、phpbrew
  • ruby多版本管理工具 rvm
  • nodejs多版本管理工具 nvm
  • python 的多版本管理工具 venv (基于已安装版本创建虚拟环境,使用前需激活进入该环境,实现python的多版本)

这些工具都非常著名,而且用法命令参数都非常相似(一通百通!学会别人的优点!蛮好的)。使用类似工具减轻了开发者手动管理版本的心智负担,节省了大量时间。

轮到go语言了,之前网上有关于go语言的多版本工具:gvm,但是我查看了它的github项目地址,发现是基于ruby开发的,项目的编译和安装都比较麻烦(还要用到autogen等工具生成Makefile,编译非常讨厌)。
那么本文将介绍的go的多版本工具g有什么优点呢?

  1. 首先g 就是用go语言开发的。那么它的编译就非常简单:
    为了国内访问无障碍,以下仓库地址使用了 csdn托管的git仓库(镜像自官方仓库: https://github.com/voidint/g

    git clone https://gitcode.net/linuxlibs/golang_multi_version_manager_g
    cd g/
    go mod tidy
    go build

    然后可以将 g 可执行文件复制到系统可执行文件目录。就可以通过g命令调用。

  2. 其次,g进行go多版本管理的命令参数非常直观易用:

    $  g help 
    NAME:
    g - Golang Version Manager
    
    USAGE:
    g  command [arguments...]
    
    VERSION:
    1.5.2
    
    AUTHOR:
    voidint <voidint@126.com>
    
    COMMANDS:
    ls         List installed versions
    ls-remote  List remote versions available for install
    use        Switch to specified version
    install    Download and install a version
    uninstall  Uninstall a version
    clean      Remove files from the package download directory
    self       Modify g itself
    help, h    Shows a list of commands or help for one command
    
    GLOBAL OPTIONS:
    --help, -h     show help (default: false)
    --version, -v  print the version (default: false)
    
    COPYRIGHT:
    Copyright (c) 2019-2023, voidint. All rights reserved.

    参数风格类似go的参数风格,无需---作为参数前缀。
    而且只提供必要的参数,多余的功能没有。比如

    查看当前已安装了哪些go版本:
  3. 如果系统之前已通过apt/yum/dnf 等命令从软件仓库安装了golang 包,那么先卸载:

    # ubuntu或 deepin linux下:
    sudo apt  remove  golang -y 
    sudo apt autoremove -y
# 使用g 查看go 官方发布了哪些版本:从输出结果看,我只能非常羡慕:所有发布的go版本都在内

$  g  ls-remote 
g ls-remote
  1
  1.2.2
  1.3rc1
  1.3rc2
  1.3
  1.3.1
  1.3.2
  1.3.3
  1.4beta1
  1.4rc1
  1.4rc2
  1.4
  1.4.1
  1.4.2
  1.4.3
  1.5beta1
  1.5beta2
  1.5beta3
  1.5rc1
  1.5
  1.5.1
  1.5.2
  1.5.3
  1.5.4
  1.6beta1
  1.6beta2
  1.6rc1
  1.6rc2
  1.6
  1.6.1
  1.6.2
  1.6.3
  1.6.4
  1.7beta1
  1.7beta2
  1.7rc1
  1.7rc2
  1.7rc3
  1.7rc4
  1.7rc5
  1.7rc6
  1.7
  1.7.1
  1.7.3
  1.7.4
  1.7.5
  1.7.6
  1.8beta1
  1.8beta2
  1.8rc1
  1.8rc2
  1.8rc3
  1.8
  1.8.1
  1.8.2
  1.8.3
  1.8.4
  1.8.5
  1.8.6
  1.8.7
  1.9beta1
  1.9beta2
  1.9rc1
  1.9rc2
  1.9
  1.9.1
  1.9.2rc2
  1.9.2
  1.9.3
  1.9.4
  1.9.5
  1.9.6
  1.9.7
  1.10beta1
  1.10beta2
  1.10rc1
  1.10rc2
  1.10
  1.10.1
  1.10.2
  1.10.3
  1.10.4
  1.10.5
  1.10.6
  1.10.7
  1.10.8
  1.11beta1
  1.11beta2
  1.11beta3
  1.11rc1
  1.11rc2
  1.11
  1.11.1
  1.11.2
  1.11.3
  1.11.4
  1.11.5
  1.11.6
  1.11.7
  1.11.8
  1.11.9
  1.11.10
  1.11.11
  1.11.12
  1.11.13
  1.12beta1
  1.12beta2
  1.12rc1
  1.12
  1.12.1
  1.12.2
  1.12.3
  1.12.4
  1.12.5
  1.12.6
  1.12.7
  1.12.8
  1.12.9
  1.12.10
  1.12.11
  1.12.12
  1.12.13
  1.12.14
  1.12.15
  1.12.16
  1.12.17
  1.13beta1
  1.13rc1
  1.13rc2
  1.13
  1.13.1
  1.13.2
  1.13.3
  1.13.4
  1.13.5
  1.13.6
  1.13.7
  1.13.8
  1.13.9
  1.13.10
  1.13.11
  1.13.12
  1.13.13
  1.13.14
  1.13.15
  1.14beta1
  1.14rc1
  1.14
  1.14.1
  1.14.2
  1.14.3
  1.14.4
  1.14.5
  1.14.6
  1.14.7
  1.14.8
  1.14.9
  1.14.10
  1.14.11
  1.14.12
  1.14.13
  1.14.14
  1.14.15
  1.15beta1
  1.15rc1
  1.15rc2
  1.15
  1.15.1
  1.15.2
  1.15.3
  1.15.4
  1.15.5
  1.15.6
  1.15.7
  1.15.8
  1.15.9
  1.15.10
  1.15.11
  1.15.12
  1.15.13
  1.15.14
  1.15.15
  1.16beta1
  1.16rc1
  1.16
  1.16.1
  1.16.2
  1.16.3
  1.16.4
  1.16.5
  1.16.6
  1.16.7
  1.16.8
  1.16.9
  1.16.10
  1.16.11
  1.16.12
  1.16.13
  1.16.14
  1.16.15
  1.17beta1
  1.17rc1
  1.17rc2
  1.17
  1.17.1
  1.17.2
  1.17.3
  1.17.4
  1.17.5
  1.17.6
  1.17.7
  1.17.8
  1.17.9
  1.17.10
  1.17.11
  1.17.12
  1.17.13
  1.18beta1
  1.18beta2
  1.18rc1
  1.18
  1.18.1
  1.18.2
  1.18.3
  1.18.4
  1.18.5
  1.18.6
  1.18.7
  1.18.8
  1.18.9
  1.18.10
  1.19beta1
  1.19rc1
  1.19rc2
  1.19
  1.19.1
  1.19.2
  1.19.3
  1.19.4
  1.19.5
  1.19.6
  1.19.7
  1.19.8
  1.19.9
  1.19.10
  1.19.11
  1.19.12
  1.19.13
  1.20rc1
  1.20rc2
  1.20rc3
  1.20
  1.20.1
  1.20.2
  1.20.3
  1.20.4
  1.20.5
  1.20.6
  1.20.7
  1.20.8
  1.20.9
  1.20.10
  1.21rc2
  1.21rc3
  1.21rc4
  1.21.0
  1.21.1
  1.21.2
 1.21.3

然后就可以使用按照上面安装的g 增加go版本了。

# 使用g安装新的go 版本,比如我要安装最新的1.21.3 版本,install完成后 use以下,就启用了:
$  g  install  1.21.3
$  g use 1.21.3
$  go version
go version go1.21.3 linux/amd64

由于使用普通用户模式安装的,go的可执行文件安装路径在 ~/.g/go/bin/go 。go version 显示当前go版本为安装的版本。

加装另外的版本:

$ g install   1.20.1
Downloading  93% [=============> ] (90/95 MB, 11 MB/s) [8s:0s]
Computing checksum with SHA256
Checksums matched
Now using go1.20.1
$ g  use  1.20.1 
go version go1.20.1 linux/amd64
$ go version
go version go1.20.1 linux/amd64

然后就可以像平常正常使用go命令了。

  1. 使用g进行多版本管理比 使用 go get 方式安装go 多版本的优点
    g 安装的go多版本可以任意切换,而且使用go命令时,后面无需携带 版本号如go1.20.1。版本切换后,无感使用。
版权声明:本文《使用多版本管理工具 g 管理多版本的Go语言》为「linux名库」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。联系方式osschina@qq.com
 
Leave a Reply 0

Your email address will not be published. Required fields are marked *


加好友请备注:linuxlibs
您可以在微信公众号联系我们
您可以通过邮件联系我们
我们将24小时内回复。
取消