利用gvm管理go版本

2022-12-07 09:07:13 浏览数 (1)

利用gvm管理go版本

现在转行开发之后,使用Go语言的场景变多了,有时候很多github上down下来的工程使用了不同的golang版本,在编译的时候,都会遇到一些依赖包的兼容性问题。这就要求我们在同一台机器上,安装多个golang的版本,多个版本之间如何进行快速切换和管理,就成为了一个问题。

所幸,开源的gvm工具可以比较好地解决同一台服务器上安装多个go版本的问题。

01

gvm的安装

安装分为下面几个命令:

1、wget命令下载gvm的github项目文件。

wget https://github.com/moovweb/gvm/archive/refs/heads/master.zip

下载得到master.zip文件夹。

代码语言:javascript复制
[root@yeyz ~]# wget https://github.com/moovweb/gvm/archive/refs/heads/master.zip
--2022-10-23 18:56:37--  https://github.com/moovweb/gvm/archive/refs/heads/master.zip
Resolving github.com (github.com)... 20.205.243.166
Connecting to github.com (github.com)|20.205.243.166|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://codeload.github.com/moovweb/gvm/zip/refs/heads/master [following]
--2022-10-23 18:56:38--  https://codeload.github.com/moovweb/gvm/zip/refs/heads/master
Resolving codeload.github.com (codeload.github.com)... 20.205.243.165
Connecting to codeload.github.com (codeload.github.com)|20.205.243.165|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [application/zip]
Saving to: ‘master.zip’

    [     <=>                                                                                                                                                                                        ] 357,461      378KB/s   in 0.9s   

2022-10-23 18:56:40 (378 KB/s) - ‘master.zip’ saved [357461]

[root@yeyz ~]# 
[root@yeyz ~]# ls  -l
total 356
-rw-r--r-- 1 root root    108 Jun 13 23:57 dump.rdb
-rw-r--r-- 1 root root 357461 Oct 23 18:56 master.zip

2、解压master.zip文件,执行其中的install文件

代码语言:javascript复制
解压master.zip文件
[root@yeyz ~]# unzip master.zip 
Archive:  master.zip
19365a6ab8ac4920234b2612c529eed2373299db

解压出来gvm-master目录
[root@yeyz ~]# ll
total 360
-rw-r--r-- 1 root root    108 Jun 13 23:57 dump.rdb
drwxr-xr-x 9 root root   4096 Feb 17  2020 gvm-master
-rw-r--r-- 1 root root 357461 Oct 23 18:56 master.zip

进入gvm-master/binscripts/目录
[root@yeyz ~]# cd gvm-master/binscripts/
[root@yeyz binscripts]# ll
total 4
-rwxr-xr-x 1 root root 4031 Feb 17  2020 gvm-installer

执行gvm-installer文件
[root@yeyz binscripts]# ./gvm-installer 
Cloning from https://github.com/moovweb/gvm.git to /root/.gvm
which: no go in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql-8.0.22/bin)
No existing Go versions detected
Installed GVM v1.0.22

Please restart your terminal session or to get started right away run
 `source /root/.gvm/scripts/gvm`

自动安装好了gvm版本,按照提示执行如下命令
[root@yeyz binscripts]# source /root/.gvm/scripts/gvm

至此,gvm安装完毕。下面是常见的一些命令:

代码语言:javascript复制
gvm常见命令如下

查看当前机器的Go环境
$ gvm  list

查看所有可安装的Go版本
$ gvm listall

安装Go
$ gvm install go1.17.1

切换Go版本
$ gvm use go1.17.1

查看Go版本
$ go version

02

查看并安装的go

使用gvm listall命令,查看gvm支持安装的golang版本,如下

代码语言:javascript复制
[root@yeyz binscripts]# gvm listall

gvm gos (available)

   go1
   go1.0.1
   go1.0.2
   go1.0.3
   .......
   go1.6.2
   go1.6.3
   go1.6.4
   go1.7
   go1.7beta1
   go1.7beta2
   go1.7rc1
   go1.7rc2

可以看到,几乎golang发布路径上的所有版本,它都是支持的。

安装指定版本的go语言,例如go17:

代码语言:javascript复制
[root@yeyz ~]$ gvm install go1.17.1
Installing go1.17.1...
 * Compiling...
go1.17.1 successfully installed!

当然,你可以在一台服务器上安装go的多个版本,只需要修改一下gvm命令最后面的go版本即可。

查看当前系统所有的go版本

代码语言:javascript复制
[root@yeyz ~]$ gvm list

gvm gos (installed)

   go1.17.1
=> system

其中,system代表系统上本来就存在的go版本。system旁边的=>符号代表当前使用的是系统上的go版本。

如果我们需要切换go的版本,可以使用下面的go use命令来进行切换,如下:

代码语言:javascript复制
[root@yeyz ~]$ gvm use go1.17.1
Now using version go1.17.1

[root@yeyz ~]$ go version
go version go1.17.1 linux/amd64

使用上面的方法,就可以很方便地进行golang版本的切换。

其实除了版本管理之外,还需要进行go的pkgset管理,它主要针对不同的go版本,下载下来的依赖包,将它们放置在不同的路径下面。

修改pkgset常用的命令如下(不再单独演示):

代码语言:javascript复制
[root@yeyz ~]$ gvm use go1.17.1


pkgset使用

#自定义新的pkgset比如gopkg17
gvm pkgset create gopkg17

#应用gopkg17
gvm pkgset use gopkg17

#查看pkgset路径
gvm pkgset list
echo $GOPATH

#安装xxx包,此时它被安装到gopkg17的下面
go get github.com/xxx

上述go版本的管理,和gopkg的管理,是gvm最常用的2个功能。除此之外,它还有其他一些常用命令和功能,大家可以使用gvm命令去查看,然后按需去使用:

代码语言:javascript复制
[root@yeyz ~ ]# gvm 
Usage: gvm [command]

Description:
  GVM is the Go Version Manager

Commands:
  version    - print the gvm version number
  get        - gets the latest code (for debugging)
  use        - select a go version to use (--default to set permanently)
  diff       - view changes to Go root
  help       - display this usage text
  implode    - completely remove gvm
  install    - install go versions
  uninstall  - uninstall go versions
  cross      - install go cross compilers
  linkthis   - link this directory into GOPATH
  list       - list installed go versions
  listall    - list available versions
  alias      - manage go version aliases
  pkgset     - manage go packages sets
  pkgenv     - edit the environment for a package set

0 人点赞