注意:master
分支可能处于开发之中并非稳定版本,请通过 tag 下载稳定版本的源代码,或通过release下载已编译的二进制可执行文件。
g
是一个 Linux、macOS、Windows 下的命令行工具,可以提供一个便捷的多版本 go 环境的管理和切换。
- 支持列出可供安装的 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 "$HOME/.g/env"
-
Windows(适用于 pwsh)
$ iwr -Uri https://raw.githubusercontent.com/voidint/g/master/install.ps1 | pwsh
-
下载release的二进制压缩包
-
将压缩包解压至
PATH
环境变量目录下(推荐~/.g/bin
目录) -
将所需的环境变量写入
~/.g/env
文件$ cat >~/.g/env <<'EOF' #!/bin/sh # g shell setup export GOROOT="${HOME}/.g/go" export PATH="${HOME}/.g/bin:${GOROOT}/bin:$PATH" export G_MIRROR=https://golang.google.cn/dl/ EOF
-
将
~/.g/env
导入到 shell 环境配置文件(如~/.bashrc
、~/.zshrc
...)$ cat >>~/.bashrc <<'EOF' # g shell setup if [ -f "${HOME}/.g/env" ]; then . "${HOME}/.g/env" fi EOF
-
启用环境变量
$ source ~/.bashrc # 或source ~/.zshrc
-
创建目录
mkdir ~/.g/bin
-
下载release的 windows 版本的二进制压缩包, 解压之后放到
~/.g/bin
目录下 -
默认二进制文件名是 g.exe, 如果你已经用 g 这个命令已经用作为 git 的缩写,那么你可以把 g.exe 改为其他名字,如 gvm.exe
-
执行命令
code $PROFILE
, 这个命令会用 vscode 打开默认的 powershell 配置文件 -
在 powershell 的默认配置文件中加入如下内容
$env:GOROOT="$HOME\.g\go" $env:Path=-join("$HOME\.g\bin;", "$env:GOROOT\bin;", "$env:Path")
-
再次打开 powershell 终端,就可以使用 g 或者 gvm 命令了
查询当前可供安装的stable
状态的 go 版本
$ 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
-
环境变量
G_MIRROR
有什么作用?由于中国大陆无法自由访问 Golang 官网,导致查询及下载 go 版本都变得困难,因此可以通过该环境变量指定一个或多个镜像站点(多个镜像站点之间使用英文逗号分隔),g 将从该站点查询、下载可用的 go 版本。已知的可用镜像站点如下:
- Go 官方镜像站点:https://golang.google.cn/dl/
- Go 语言中文网:https://studygolang.com/dl
- 阿里云开源镜像站点:https://mirrors.aliyun.com/golang/
-
环境变量
G_EXPERIMENTAL
有什么作用?当该环境变量的值为
true
时,将开启所有的实验特性。 -
环境变量
G_HOME
有什么作用?按照惯例,g 默认会将
~/.g
目录作为其家目录。若想自定义家目录(Windows 用户需求强烈),可使用该环境变量切换到其他家目录。由于该特性还属于实验特性,需要先开启实验特性开关G_EXPERIMENTAL=true
才能生效。特别注意,该方案并不十分完美,因此才将其归类为实验特性,详见#18。 -
macOS 系统下安装 go 版本,g 抛出
[g] Installation package not found
字样的错误提示,是什么原因?Go 官方在1.16版本中才加入了对 ARM 架构的 macOS 系统的支持。因此,ARM 架构的 macOS 系统下均无法安装 1.15 及以下的版本的 go 安装包。若尝试安装这些版本,g 会抛出
[g] Installation package not found
的错误信息。 -
是否支持网络代理?
支持。可在
HTTP_PROXY
、HTTPS_PROXY
、http_proxy
、https_proxy
等环境变量中设置网络代理地址。 -
支持哪些 Windows 版本?
因为
g
的实现上依赖于符号链接
,因此操作系统必须是Windows Vista
及以上版本。 -
Windows 版本安装以后不生效?
这有可能是因为没有把下载安装的加入到
$Path
的缘故,需要手动将$Path
纳入到用户的环境变量中。为了方便起见,可以使用项目中的path.ps1
的 PowerShell 脚本运行然后重新启动计算机即可。 -
使用 g 安装了某个 go 版本后,执行
go version
命令,但输出的 go 版本号并非是所安装的那个版本,这是不是 bug ?由于当前 shell 环境中
PATH
环境变量设置有误导致(建议执行which go
查看二进制文件所在路径)。在未修改 g 家目录的情况下,二进制文件 go 的路径应该是~/.g/go/bin/go
,如果不是这个路径,就说明PATH
环境变量设置有误。 -
支持源代码编译安装吗?
不支持