Table of Contents

简介

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

github地址: https://github.com/voidint/g

特性

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

自动化安装

# 建议安装前清空`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
    macos: vim ~/.bash_profile,加入source ~/.bashrc解决问题。

使用

1.查看g版本

g --help
NAME:
  g - Golang Version Manager

 USAGE:
  g  command [arguments...]

 VERSION:
  1.2.1

 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
    help, h    Shows a list of commands or help for one command

 GLOBAL OPTIONS:
  --help, -h     show help
  --version, -v  print the version

 COPYRIGHT:
  Copyright (c) 2019-2021, voidint. All rights reserved.
g --version
g version 1.2.1
build: 2021-10-05T15:19:17+08:00
branch: release/1.2.1
commit: 674c2616724f983f51dfe8030637f46f51da715b

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

g ls-remote stable
1.16.12
1.17.5

3.安装目标go版本1.17.5和1.16.12

g install 1.17.5
Downloading 100% |███████████████| (130/130 MB, 16.578 MB/s) [7s:0s]
Computing checksum with SHA256
Checksums matched
Now using go1.17.5
g install 1.16.12
Downloading 100% |███████████████| (125/125 MB, 16.947 MB/s) [7s:0s]
Computing checksum with SHA256
Checksums matched
Now using go1.16.12

4.查询已安装的go版本

g ls
* 1.16.12
  1.17.5

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

g ls-remote
  1
  1.2.2
  1.3rc1
  1.3rc2
  ...
* 1.16.12
  1.17beta1
  1.17rc1
  1.17rc2
  1.17
  1.17.1
  1.17.2
  1.17.3
  1.17.4
  1.17.5
  1.18beta1

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

g use 1.17.5
go version go1.17.5 darwin/amd64

go env | grep VERSION
GOVERSION="go1.17.5"

7.卸载一个已安装的go版本

g ls
  1.16.12
* 1.17.5

g uninstall 1.16.12
Uninstalled go1.16.12

g ls
* 1.17.5

g 目录结构

cd ~/.g
total 0
drwxr-xr-x   5 steven  staff   160 12 28 15:00 .
drwxr-xr-x+ 80 steven  staff  2560 12 28 15:23 ..
drwxr-xr-x   4 steven  staff   128 12 28 14:41 downloads
lrwxr-xr-x   1 steven  staff    32 12 28 15:00 go -> /Users/steven/.g/versions/1.17.5
drwxr-xr-x   4 steven  staff   128 12 28 15:00 versions
cd downloads/
~/.g/downloads$ ll
total 523056
drwxr-xr-x  4 steven  staff        128 12 28 14:41 .
drwxr-xr-x  5 steven  staff        160 12 28 15:00 ..
-rw-r--r--  1 steven  staff  131024468 12 28 14:41 go1.16.12.darwin-amd64.tar.gz
-rw-r--r--  1 steven  staff  136774992 12 28 14:41 go1.17.5.darwin-amd64.tar.gz
~/.g/versions$ ll
total 0
drwxr-xr-x   4 steven  staff  128 12 28 15:00 .
drwxr-xr-x   5 steven  staff  160 12 28 15:00 ..
drwxr-xr-x  20 steven  staff  640 12 28 15:00 1.16.12
drwxr-xr-x  19 steven  staff  608 12 28 14:41 1.17.5

FAQ

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

  • 是否支持网络代理?
    支持。可在HTTP_PROXY、HTTPS_PROXY、http_proxy、https_proxy等环境变量中设置网络代理地址。

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

  • Windows 版本安装以后不生效?
    这有可能是因为没有把下载安装的加入到 $Path 的缘故,需要手动将 $Path 纳入到用户的环境变量中。为了方便起见,可以使用项目中的 path.ps1 的 PowerShell 脚本运行然后重新启动计算机即可。

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

参考文档

1.g