前言
在 Go 开发者日常工作中,经常会遇到需要同时使用多个 Go 版本的情况------比如项目依赖旧版本的特性、测试新版本的兼容性,或者团队成员使用不同版本。手动管理 Go 环境不仅麻烦,还容易导致环境污染和切换不便。这时,一款轻量级的命令行工具就能大幅提升效率。
GVM:Go 版本管理器安装与使用指南,GVM 项目已不再活跃维护(最后更新在 2023 年)
g 是一个专为 Linux、macOS 和 Windows 设计的 Golang 版本管理工具。它由 voidint 开发,托管在 GitHub 上(https://github.com/voidint/g)。
g 的核心作用是:一键安装、切换、卸载和管理多个 Go 版本,无需手动设置 GOROOT、GOPATH 或 PATH 环境变量。它支持镜像加速(特别适合国内用户),绿色安装与卸载,操作极简,是 Go 开发者必备的"版本管理器"。
最新版本为 v1.8.0 (2024 年 7 月发布),新增了 MCP 服务模式支持和自动根据 go.mod 文件切换 Go 版本的功能,进一步提升了开发体验。
g 的主要特性
- 列出可安装的 Go 版本(支持 stable、all 等过滤)
- 本地安装多个 Go 版本
- 自由切换已安装版本
- 卸载指定版本
- 清空安装包缓存
- 软件自我更新与绿色卸载(≥ v1.5.0)
- 支持国内镜像加速(G_MIRROR)
- 最新版支持 go.mod 自动切换和 MCP 服务模式
安装方法(推荐自动化安装)
Linux / macOS(bash / zsh)
建议安装前先清空 GOROOT、GOBIN 等环境变量,避免冲突。
bash
curl -sSL https://raw.githubusercontent.com/voidint/g/master/install.sh | bash
安装完成后,建议在 ~/.bashrc 或 ~/.zshrc 中添加别名检查(防止与 git alias 冲突):
bash
cat << 'EOF' >> ~/.bashrc
# 可选。检查 g 别名是否被占用
if [[ -n $(alias g 2>/dev/null) ]]; then unalias g; fi
EOF
source "$HOME/.g/env"
Windows(PowerShell)
powershell
iwr https://raw.githubusercontent.com/voidint/g/master/install.ps1 -useb | iex
手动安装(适用于有特殊需求的用户)
- 创建家目录(推荐
~/.g)。 - 从 Releases 页面 下载对应平台的二进制压缩包,解压后放入
~/.g/bin。 - 创建环境变量文件
~/.g/env(Linux/macOS 示例):
bash
cat > ~/.g/env << 'EOF'
#!/bin/sh
# g shell setup
export GOROOT="${HOME}/.g/go"
[ -z "$GOPATH" ] && export GOPATH="${HOME}/go"
export PATH="${HOME}/.g/bin:${GOROOT}/bin:${GOPATH}/bin:$PATH"
export G_MIRROR=https://golang.google.cn/dl/
EOF
- 将环境变量导入 shell 配置文件并
source生效。
Windows 手动安装类似,注意将二进制重命名为 gvm.exe(如果 g 被 git 占用)并修改 $PROFILE。
使用方法(超简单命令)
g 的所有操作都通过一个 g 命令完成,下面是常用操作示例:
1. 查看可安装版本
bash
# 只看稳定版
g ls-remote stable
# 查看所有版本(包括 rc、beta)
g ls-remote
2. 安装指定版本
bash
g install 1.23.0 # 会自动下载、校验、安装并切换
安装过程会显示进度条、SHA256 校验,确保安全。
3. 查看已安装版本
bash
g ls
当前使用版本前会有 * 标记。
4. 切换版本
bash
g use 1.22.5
切换后立即生效,执行 go version 可验证。
5. 卸载版本
bash
g uninstall 1.21.0
6. 清空缓存(节省磁盘空间)
bash
g clean
7. 工具自身管理
bash
g version # 查看 g 版本
g self update # 自我更新
g self uninstall # 彻底卸载 g(绿色)
8. 高级配置(国内用户必备)
编辑 ~/.g/env 文件,设置镜像加速:
bash
export G_MIRROR=https://mirrors.aliyun.com/golang/,https://golang.google.cn/dl/
支持多种采集器(如 official、fancyindex、autoindex),国内镜像站包括阿里云、南大、华科、中科大等。
已知的可用镜像站点如下:
- Go 官方镜像站:https://golang.google.cn/dl/
- 阿里云开源镜像站:https://mirrors.aliyun.com/golang/
- 南京大学开源镜像站:https://mirrors.nju.edu.cn/golang/
- 华中科技大学开源镜像站:https://mirrors.hust.edu.cn/golang/
- 中国科学技术大学开源镜像站:https://mirrors.ustc.edu.cn/golang/
若想启用实验特性:
bash
export G_EXPERIMENTAL=true
常见问题解答(FAQ)
-
为什么需要 G_MIRROR?
由于中国大陆无法自由访问 Golang 官网,导致查询及下载 go 版本都变得困难,因此可以通过该环境变量指定一个或多个镜像站点(多个镜像站点之间使用英文逗号分隔),g 将从该站点查询、下载可用的 go 版本,设置镜像源后 g 会自动从镜像拉取版本列表和安装包。
-
如何自定义安装目录?
设置环境变量
G_HOME即可修改默认~/.g目录。 -
go.mod 自动切换(v1.8.0 新特性)
进入项目目录时,g 会自动检测
go.mod中的 Go 版本并切换,非常适合多项目开发。 -
MCP 服务模式是什么?
v1.8.0 新增的实验特性,可用于集成开发环境或自动化场景(具体用法可查看官方文档)。
-
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环境变量设置有误。 -
支持源代码编译安装吗?
不支持