当前位置: 首页 > news >正文

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

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

GVM(Go Version Manager)是 Go 版本管理工具,定位类似于 Node 生态的nvm、Python 生态的 uv。它可以在同一台机器上安装、切换多个 Go 版本,互不干扰。

日常开发中最常见的需求无非这几个:装 gvm → 看有哪些版本 → 装指定版本 → 切到指定版本 → 设为默认。本文按这条主线展开,并在最后单独说明一个新人必踩的坑——源码编译依赖预装 Go


1. 安装 GVM

通过官方安装脚本一键安装(依赖bashcurl/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.0go1.22.3go1.23.0等)。版本号较多,可以配合grep过滤:

gvm listall|grepgo1.22

查看本地已经安装的版本用:

gvm list

3. 安装指定版本

gvminstallgo1.22.3

⚠️ 这条命令默认会下载源码并在本地编译,并非直接下载预编译包。详见 第 6 节:新手必踩的坑。

更省心的做法是加--binary参数,直接下载官方预编译二进制,跳过编译:

gvminstallgo1.22.3--binary

4. 使用指定版本

安装完成后,切换到该版本(仅对当前 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」的鸡生蛋困境。

三种解法(推荐第一种):

  1. 直接用--binary(推荐)

    gvminstallgo1.22.3--binary

    跳过编译,下载官方预编译包,几秒钟搞定,绝大多数场景都不需要本地编译。

  2. 先手动装一个引导 Go

    从 go.dev/dl 下载官方包,或用系统包管理器装一个临时版本,再让 GVM 用它做 bootstrap。装好第一个 gvm 管理的版本后,临时 Go 即可移除。

  3. 让 GVM 自己编译一个go1.4bootstrap

    gvminstallgo1.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
http://www.jsqmd.com/news/1294153/

相关文章:

  • 单片机毕设项目:基于舵机与 MP3 模块的智能哄睡系统设计 基于 OLED 数据显示的婴儿状态监测系统实现(012201)
  • 重庆本地家电维修师傅电话推荐|本地维修家电|欧米到家统一报修
  • 市场封装齐全的大阵列芯片测试座制造商
  • 12个月后,Claude跌出了周榜前十
  • 高端光学筛选机直驱电机供应商推荐与选型指南
  • HoRain云--JavaScript RegExp 对象
  • 2026年应届生黑科技榜单9款一键生成论文工具亲测!
  • GNSS高精度定位中的天线相位中心改正:原理、模型与工程实践
  • 知网研学使用指南及高效文献管理实用技巧分享
  • 计算机单片机毕设实战-基于嵌入式单片机的婴儿状态监测装置开发 基于阈值控制的智能婴儿哄睡系统设计(012201)
  • PiliPlus:解锁B站无限可能,打造你的专属视频体验终极方案
  • Spring AI企业级应用实战(6):MCP Client/Server接入、工具发现与生产治理
  • 中科复兴:以全栈智能方案重塑城市生命线韧性
  • CAN FD帧结构深度解析:从经典CAN到灵活数据速率的演进与实战
  • Python安装路径查找全攻略:Windows与Linux实战指南
  • 三步快速找回消失的QQ空间记忆:GetQzonehistory完整备份指南
  • 三维热力图实战:从Matplotlib到Plotly,可视化决策边界与损失曲面
  • Sunshine游戏串流:如何打造你的个人云游戏服务器?
  • 终极指南:如何用Barrier免费实现跨系统键鼠共享
  • 如何用ChatTTS-ui构建本地AI语音合成系统:从探索到实战应用
  • 3步轻松激活Windows和Office:KMS_VL_ALL_AIO智能激活脚本完全指南
  • HarmonyOS 阔折叠响应式适配实战 —— 别识别机型,去测容器
  • 终极编程字体指南:Maple Mono如何用圆角设计与智能连字提升你的编码体验
  • 联想刃7000k BIOS隐藏选项终极解锁指南:3分钟获得完整管理员权限
  • 从原始API到SDK:手机号归属地查询工具化封装实践
  • 重庆自建房大门厂家性价比推荐,雅盛乐门业本地定制一站式服务 - 资讯速览
  • 零信任落地趋势:身份、设备与环境的持续校验演进
  • 仅剩47个名额|《AI批处理脚本安全认证训练营》首发:由OSI标准委员会成员+微软MVP联合主讲,结业颁发唯一可验签数字证书
  • 2026年07月:浙江三联环保科技股份有限公司——污泥立式清洁焚烧系统供应厂家深度解析 - 优企名品
  • C语言32个关键字深度解析:从内存模型到编译链接实战