现在转行开发之后,使用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文件夹。
[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文件
解压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安装完毕。下面是常见的一些命令:
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版本,如下
[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:
[root@yeyz ~]$ gvm install go1.17.1
Installing go1.17.1...
* Compiling...
go1.17.1 successfully installed!
当然,你可以在一台服务器上安装go的多个版本,只需要修改一下gvm命令最后面的go版本即可。
查看当前系统所有的go版本:
[root@yeyz ~]$ gvm list
gvm gos (installed)
go1.17.1
=> system
其中,system代表系统上本来就存在的go版本。system旁边的=>符号代表当前使用的是系统上的go版本。
如果我们需要切换go的版本,可以使用下面的go use命令来进行切换,如下:
[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常用的命令如下(不再单独演示):
[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命令去查看,然后按需去使用:
[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