g:一个好用的golang多版本管理工具

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

https://github.com/voidint/g

asciicast

特性

  • 支持列出可供安装的 go 版本号
  • 支持列出已安装的 go 版本号
  • 支持在本地安装多个 go 版本
  • 支持卸载已安装的 go 版本
  • 支持在已安装的 go 版本之间自由切换
  • 支持软件自我更新(>= 1.3.0)

安装

自动化安装

Linux/macOS(适用于bash、zsh)

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

手动安装

下载release的二进制压缩包

将压缩包解压至PATH环境变量目录下(如/usr/local/bin

编辑shell环境配置文件(如~/.bashrc~/.zshrc…)

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

启用环境变量

$ source ~/.bashrc # 或source ~/.zshrc

使用

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

国内需要先设置环境变量,否则可能无法使用 export G_MIRROR=https://studygolang.com/dl
$ g ls-remote stable
  1.13.15
  1.14.7

安装目标go版本1.14.7

$ g install 1.14.7
Downloading 100% |███████████████| (119/119 MB, 9.939 MB/s) [12s:0s]
Computing checksum with SHA256
Checksums matched
Now using go1.14.7

查询已安装的go版本

$ g ls
  1.7.6
  1.11.13
  1.12.17
  1.13.15
  1.14.6
* 1.14.7

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

$ g ls-remote
  1
  1.2.2
  1.3
  1.3.1
  ...    // 省略若干版本
  1.14.5
  1.14.6
* 1.14.7
  1.15rc1

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

$ g use 1.14.6
go version go1.14.6 darwin/amd64

卸载一个已安装的go版本

$ g uninstall 1.14.7
Uninstalled go1.14.7

更新 g 软件本身

$ g update
A new version of g(v1.2.2) is available
Downloading 100% |███████████████| (3.7/3.7 MB, 2.358 MB/s)
Computing checksum with SHA256
Checksums matched
Update completed

FAQ

  • 环境变量G_MIRROR有什么作用?由于中国大陆无法自由访问 Golang 官网,导致查询及下载 go 版本都变得困难,因此可以通过该环境变量指定一个或多个镜像站点(多个镜像站点之间使用英文逗号分隔),g 将从该站点查询、下载可用的 go 版本。已知的可用镜像站点如下:
  • 环境变量G_EXPERIMENTAL有什么作用?当该环境变量的值为true时,将开启所有的实验特性
  • 环境变量G_HOME有什么作用?按照惯例,g 默认会将~/.g目录作为其家目录。若想自定义家目录(Windows 用户需求强烈),可使用该环境变量切换到其他家目录。由于该特性还属于实验特性,需要先开启实验特性开关G_EXPERIMENTAL=true才能生效。特别注意,该方案并不十分完美,因此才将其归类为实验特性,详见#18
  • 是否支持网络代理?支持。可在HTTP_PROXYHTTPS_PROXYhttp_proxyhttps_proxy等环境变量中设置网络代理地址。
  • 支持哪些 Windows 版本?因为g的实现上依赖于符号链接,因此操作系统必须是Windows Vista及以上版本。
  • Windows 版本安装以后不生效?这有可能是因为没有把下载安装的加入到 $Path 的缘故,需要手动将 $Path 纳入到用户的环境变量中。为了方便起见,可以使用项目中的 path.ps1 的 PowerShell 脚本运行然后重新启动计算机即可。
  • 支持源代码编译安装吗?不支持