GVM 使用指南:管理多版本 Go

发布时间:2026/7/30 14:11:16
GVM 使用指南:管理多版本 Go GVM 使用指南管理多版本 GoGVMGo Version Manager是 Go 版本管理工具定位类似于 Node 生态的nvm、Python 生态的 uv。它可以在同一台机器上安装、切换多个 Go 版本互不干扰。日常开发中最常见的需求无非这几个装 gvm → 看有哪些版本 → 装指定版本 → 切到指定版本 → 设为默认。本文按这条主线展开并在最后单独说明一个新人必踩的坑——源码编译依赖预装 Go。1. 安装 GVM通过官方安装脚本一键安装依赖bash、curl/gitbash(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只影响当前终端会话新开一个窗口又会变回旧版本。要永久设为默认加--defaultgvm use go1.22.3--default此后每个新开的 shell 都会自动激活这个版本无需再手动gvm use。6. 新手必踩的坑源码编译依赖预装 Go这是 GVM 最反直觉的一点值得单独拎出来讲。现象当你执行gvm install go1.22.3不带--binary时GVM 会克隆 Go 源码、执行make.bash在本地编译。如果机器上没有预装任何 Go编译会失败常见报错类似ERROR: Couldnt 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