gvm 已归档且不再维护,因存在 SSL 连接错误、PATH 注入失败及与 brew 冲突等问题;推荐用 go install 或 asdf 管理多版本 Go,确保 GOROOT 隔离。

gvm 已停止维护,不建议新项目使用;当前主流且可靠的方式是用 go install 安装多版本 Go 或直接用官方 go version + 手动 PATH 切换。
为什么 gvm 不再推荐
gvm(Go Version Manager)自 2017 年起已归档,GitHub 仓库标记为 archived,不再接受 PR 或修复安全问题。它依赖过时的 shell 脚本逻辑,在 macOS Monterey+、Apple Silicon(M1/M2/M3)、较新 Linux 发行版上常出现:
-
curl: (35) SSL connect error(因硬编码旧 TLS 版本) -
gvm use go1.21.0 --default后go version仍显示旧版本(PATH 未正确注入) - 与
brew install go冲突,导致GOROOT混乱
替代方案:用 go install 管理多个 Go 版本
Go 官方自 1.17 起支持通过 go install 安装 golang.org/dl/ 下的版本工具,这是最轻量、兼容性最好的方式。
操作步骤:
立即学习“go语言免费学习笔记(深入)”;
- 确保已安装一个基础 Go(如从 go.dev/dl 下载 .pkg/.tar.gz)
- 运行
go install golang.org/dl/go1.20@latest(替换go1.20为你需要的版本) - 执行
go1.20 download下载并解压该版本到$HOME/sdk/go1.20 - 切换时临时设置:
export GOROOT=$HOME/sdk/go1.20 && export PATH=$GOROOT/bin:$PATH - 验证:
go version应输出go version go1.20.x darwin/arm64(或对应平台)
可将常用版本 alias 写入 ~/.zshrc:
alias go120='export GOROOT=$HOME/sdk/go1.20; export PATH=$GOROOT/bin:$PATH' alias go121='export GOROOT=$HOME/sdk/go1.21; export PATH=$GOROOT/bin:$PATH'
更省心的方案:使用专用版本管理器(推荐 asdf)
如果你需要频繁切换 Go(以及 Node、Rust、Python 等),asdf 是目前最活跃、插件完善、Shell 集成良好的选择。
安装与使用:
- macOS:
brew install asdf;Linux:按 asdf 官网指南 安装 - 启用 Go 插件:
asdf plugin add golang https://github.com/kennyp/asdf-golang.git - 列出可用版本:
asdf list-all golang - 安装指定版本:
asdf install golang 1.21.6 - 设为全局默认:
asdf global golang 1.21.6;或局部项目级:asdf local golang 1.19.13
它会自动处理 GOROOT、PATH 和 GOBIN,且每个版本独立安装,互不污染。
真正要注意的是:别在 $GOROOT 里手动软链或覆盖系统 Go;所有版本管理工具都依赖干净的 GOROOT 隔离——一旦混用 brew / pkg / gvm / asdf,go env -w GOPATH=... 可能失效,go mod 行为也会异常。










