GVM 使用指南:管理多版本 Go
GVM(Go Version Manager)是 Go 版本管理工具,定位类似于 Node 生态的
nvm、Python 生态的 uv。它可以在同一台机器上安装、切换多个 Go 版本,互不干扰。
日常开发中最常见的需求无非这几个:装 gvm → 看有哪些版本 → 装指定版本 → 切到指定版本 → 设为默认。本文按这条主线展开,并在最后单独说明一个新人必踩的坑——源码编译依赖预装 Go。
1. 安装 GVM
通过官方安装脚本一键安装(依赖bash、curl/git):
bash<<(curl-s-S-Lhttps://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)安装脚本会把 gvm 本体放在~/.gvm/,并向你的 shell 配置文件(~/.bashrc、~/.zshrc或~/.profile)追加一段初始化代码。让配置生效:
source~/.bashrc# zsh 用户用: source ~/.zshrc验证安装:
gvm version如果提示 gvm 命令找不到,多半是初始化脚本没被当前 shell 加载,确认 [[ -s “KaTeX parse error: Expected 'EOF', got '&' at position 27: …cripts/gvm" ]] &̲& source "HOME/.gvm/scripts/gvm” 已写进你的 rc 文件,同时确认第一步安装已完成。
2. 查看可安装的版本列表
gvm listall它会拉取 Go 官方所有发布版本(如go1.21.0、go1.22.3、go1.23.0等)。版本号较多,可以配合grep过滤:
gvm listall|grepgo1.22查看本地已经安装的版本用:
gvm list3. 安装指定版本
gvminstallgo1.22.3⚠️ 这条命令默认会下载源码并在本地编译,并非直接下载预编译包。详见 第 6 节:新手必踩的坑。
更省心的做法是加--binary参数,直接下载官方预编译二进制,跳过编译:
gvminstallgo1.22.3--binary4. 使用指定版本
安装完成后,切换到该版本(仅对当前 shell生效):
gvm use go1.22.3验证:
go version# 输出: go version go1.22.3 ...5. 默认使用指定版本
gvm use只影响当前终端会话,新开一个窗口又会变回旧版本。要永久设为默认,加--default:
gvm use go1.22.3--default此后每个新开的 shell 都会自动激活这个版本,无需再手动gvm use。
6. 新手必踩的坑:源码编译依赖预装 Go
这是 GVM 最反直觉的一点,值得单独拎出来讲。
现象:当你执行gvm install go1.22.3(不带--binary)时,GVM 会克隆 Go 源码、执行make.bash在本地编译。如果机器上没有预装任何 Go,编译会失败,常见报错类似:
ERROR: Couldn't find Go 1.4 bootstrapper in ... Building Go cmd/dist using /path/to/go1.4 go: command not found原因:Go 从 1.5 起是自举(self-hosted)语言——Go 编译器本身就是用 Go 写的,因此编译 Go 工具链需要一个已有的 Go 编译器作为引导(bootstrap toolchain,通常是go1.4)。GVM 在源码编译路径下默认会去找一个名为go1.4的 bootstrap 编译器;找不到就编不动。这就形成了「想用 gvm 装 Go,得先有个 Go」的鸡生蛋困境。
三种解法(推荐第一种):
直接用
--binary(推荐)gvminstallgo1.22.3--binary跳过编译,下载官方预编译包,几秒钟搞定,绝大多数场景都不需要本地编译。
先手动装一个引导 Go
从 go.dev/dl 下载官方包,或用系统包管理器装一个临时版本,再让 GVM 用它做 bootstrap。装好第一个 gvm 管理的版本后,临时 Go 即可移除。
让 GVM 自己编译一个
go1.4bootstrapgvminstallgo1.4--binary# 先准备 bootstrapgvminstallgo1.22.3# 再源码编译目标版本仅当你确实需要源码编译(例如要打特定
GOOS/GOARCH、开启/关闭cgo等自定义构建选项)时才有必要。
结论:如果只是日常开发切换 Go 版本,无脑加
--binary即可,能省去所有编译相关的麻烦。
附:其他常用命令
| 命令 | 作用 |
|---|---|
gvm list | 查看本地已安装版本 |
gvm listall | 查看所有可安装版本 |
gvm install <ver> --binary | 安装(预编译二进制,推荐) |
gvm use <ver> | 当前 shell 切换版本 |
gvm use <ver> --default | 设为默认版本 |
gvm uninstall <ver> | 卸载指定版本 |
gvm implode | 彻底卸载 gvm 本体(慎用) |
快速上手(TL;DR)
# 1. 安装 gvmbash<<(curl-s-S-Lhttps://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)source~/.bashrc# 2. 看可用版本gvm listall|grepgo1.22# 3. 装指定版本(务必加 --binary,避免源码编译的坑)gvminstallgo1.22.3--binary# 4. 切换使用gvm use go1.22.3# 5. 设为默认gvm use go1.22.3--default