GVM:Go 版本管理器安装与使用指南

前言

Go 语言(Golang)发展迅速,经常需要切换不同版本来进行开发、测试或兼容旧项目。GVM(Go Version Manager,由 moovweb 开发)是一个经典的 Go 版本管理工具,它可以轻松安装、管理多个 Go 版本,并切换使用。

虽然 GVM 项目已不再活跃维护(最后更新在 2023 年),但它在许多场景下仍然可用,尤其是支持从二进制直接安装现代 Go 版本(如 go1.25.x)。

1. GVM 安装

系统要求

  • Linux(Debian/Ubuntu)

    bash 复制代码
    sudo apt-get install curl git mercurial make binutils bison gcc build-essential
  • macOS
    安装 Xcode Command Line Tools 和 Mercurial:

    bash 复制代码
    xcode-select --install
    brew update
    brew install mercurial
  • 其他系统 :确保有 curlgitmercurialmakebison 等工具。

安装 GVM

使用官方安装脚本(支持 bash 或 zsh):

bash 复制代码
bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)

如果是 zsh:

bash 复制代码
zsh < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)

安装完成后,重启终端 或执行:

bash 复制代码
source ~/.gvm/scripts/gvm

验证:

bash 复制代码
gvm version

2. 安装 Go 版本(重点:推荐使用二进制安装)

GVM 默认从源码编译 Go,但现代 Go(1.5+)需要一个现有的 Go 来引导编译。如果没有已安装的 Go,就会出现错误:

复制代码
/root/.gvm/scripts/install: line 93: go: command not found
ERROR: Failed to compile...

最佳实践:优先使用 --binary(或 -B)从官方二进制安装,速度快、无需引导。

bash 复制代码
# 安装最新版(例如 go1.25.5,根据 https://go.dev/dl/ 调整)
gvm install go1.25.5 --binary

# 切换到该版本
gvm use go1.25.5

# 设置为默认版本(可选)
gvm use go1.25.5 --default

验证:

bash 复制代码
go version
# 输出:go version go1.25.5 linux/amd64(或你的平台)

如果需要从源码编译(不推荐,除非特殊需求)

先用二进制安装一个较新版本作为引导:

bash 复制代码
gvm install go1.22.7 --binary   # 或任意支持二进制的版本
gvm use go1.22.7 --default

# 然后安装目标版本(从源码)
gvm install go1.25.5

3. 常用命令

  • 列出已安装版本 (当前版本前有 =>):

    bash 复制代码
    gvm list
  • 列出所有可用版本(包括历史和 weekly):

    bash 复制代码
    gvm listall
    # 加 --all 显示更多
    gvm listall --all
  • 卸载版本

    bash 复制代码
    gvm uninstall go1.xx.x
  • 完全卸载 GVM(谨慎!会删除所有 Go 版本):

    bash 复制代码
    gvm implode

4. 网络代理设置(中国用户必备)

GVM 本身没有内置代理命令,但依赖系统代理和 Go 环境变量。

下载 Go 时(二进制/源码)的代理

设置 HTTP/HTTPS 代理(添加到 ~/.bashrc~/.zshrc):

bash 复制代码
export http_proxy=http://你的代理:端口
export https_proxy=http://你的代理:端口
export HTTP_PROXY=$http_proxy
export HTTPS_PROXY=$https_proxy
# SOCKS5 可选
export all_proxy=socks5://你的代理:端口

然后再执行 gvm install

Go 模块代理(go get / go mod)

推荐永久设置国内镜像(加速模块下载):

bash 复制代码
go env -w GOPROXY=https://goproxy.cn,direct
go env -w GOPROXY=https://goproxy.io,direct   # 或者阿里云等
go env -w GOSUMDB=off   # 可选,关闭校验(如果 sum.golang.org 访问慢)

验证:

bash 复制代码
go env GOPROXY

5. 注意事项与替代方案

  • GVM 项目已停止维护,如果遇到新问题(如新架构支持),可能需要手动修复。
  • 推荐替代工具(更活跃):
    • asdf-go(配合 asdf 插件)
    • g(轻量级)
    • 官方直接下载二进制 + 手动管理

但对于许多老项目,GVM 依然是可靠的选择。

希望这篇指南帮到你!

相关推荐
葫芦和十三9 分钟前
图解 MongoDB 05|文档模型设计:内嵌 vs 引用,反范式不是免费午餐
后端·mongodb·agent
不能放弃治疗3 小时前
单 Agent 实现模式
后端
IT_陈寒6 小时前
Redis内存爆了,原来我漏掉了这个致命配置
前端·人工智能·后端
fliter6 小时前
最后一块拼图:用 bitvec 构造 IPv4 包,真正做出自己的 Ping
后端
fliter7 小时前
用 Rust 解析并生成 ICMP 包:checksum、nom 与 cookie-factory
后端
蝎子莱莱爱打怪7 小时前
XZLL-IM干货系列 03|消息 ID 设计:一个 UUID 搞不定的事,我用两个 ID 解决了
后端·面试·开源
fliter7 小时前
从 panic 到 Result:用 Rust 重新整理一个 ping 项目的错误处理
后端
森蓝情丶8 小时前
我给 AI 搭了个法庭:一个前端仔的 LangGraph 实战全记录
前端·后端
JensCS猿8 小时前
从 Spring Boot 回看 SSM 框架:手动挡与自动挡的驾驶哲学
后端
爱勇宝8 小时前
干了近 8 年,一夜之间被裁:AI 时代,程序员最该害怕的不是 AI
前端·后端·程序员