为什么要多版本

golang每个版本都有不少调整,在学习golang的过程中可能会需要用到不同版本,比如工作项目用的版本较低,但自己又想试试最新的版本等等,这时候就需要一个多版本管理器来方便切换各种版本 >注:g和gvm是一个东西,g托管在github,gvm托管在gitee,由于gitee最少两个字符的命名限制所以改名gvm

g

g是一个Linux、macOS、Windows下的命令行工具,可以提供一个便捷的多版本go环境的管理和切换。

特性

  • 支持列出可供安装的go版本号
  • 支持列出已安装的go版本号
  • 支持在本地安装多个go版本
  • 支持卸载已安装的go版本
  • 支持在已安装的go版本之间自由切换

安装

自动化安装

  • Linux/macOS(适用于bash、zsh)

    1
    2
    3
    4
    
    # 建议安装前清空`GOROOT`、`GOBIN`等环境变量
    $ wget -qO- https://raw.githubusercontent.com/voidint/g/master/install.sh | bash
    $ echo "unalias g" >> ~/.bashrc # 可选。若其他程序(如'git')使用了'g'作为别名。
    $ source ~/.bashrc # 或者 source ~/.zshrc

手动安装

  • 下载对应平台的二进制压缩包
  • 将压缩包解压至PATH环境变量目录下,如/usr/local/bin
  • 编辑shell环境配置文件(~/.bashrc~/.zshrc…)

    1
    2
    3
    4
    5
    
    $ cat>>~/.bashrc<<EOF
    export GOROOT="${HOME}/.g/go"
    export PATH="${HOME}/.g/go/bin:$PATH"
    export G_MIRROR=https://golang.google.cn/dl/
    EOF

使用

查询当前可供安装的stable状态的go版本

1
2
3
$ g ls-remote stable
  1.11.9
  1.12.4

安装目标go版本1.12.4

1
2
3
4
$ g install 1.12.4
Installed successfully
$ go version
go version go1.12.4 darwin/amd64

查询已安装的go版本

1
2
$ g ls
* 1.12.4

查询可供安装的所有go版本

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
$ g ls-remote
  1
  1.2.2
  1.3
  1.3.1
  ...    // 省略若干版本
  1.11.7
  1.11.8
  1.11.9
  1.12
  1.12.1
  1.12.2
  1.12.3
* 1.12.4

安装目标go版本1.11.9

1
2
3
4
$ g install 1.11.9
Installed successfully
$ go version
go version go1.11.9 darwin/amd64

切换到另一个已安装的go版本

1
2
3
4
5
$ g ls
* 1.11.9
  1.12.4
$ g use 1.12.4
go version go1.12.4 darwin/amd64

卸载一个已安装的go版本

1
2
g uninstall 1.11.9
Uninstall successfully

FAQ

  • 环境变量G_MIRROR有什么作用?
    由于中国大陆无法自由访问Golang官网,导致查询及下载go版本都变得困难,因此可以通过该环境变量指定一个镜像站点(如https://golang.google.cn/dl/),g将从该站点查询、下载可用的go版本。

  • 支持哪些Windows版本?
    因为g的实现上依赖于符号链接,因此操作系统必须是Windows Vista及以上版本。

  • 支持源代码编译安装吗?
    不支持