g是轻量跨平台Go多版本管理工具,支持一键安装、秒级切换、自动镜像,所有版本隔离存于~/.g/go_versions/,不修改PATH或GOROOT。

用 g 工具管理 Go 多版本最省事
如果你只需要在本地快速切换几个 Go 版本(比如同时维护一个用 go1.19 的老项目和一个要求 go1.26 的新项目),g 是目前最轻量、无依赖、跨平台的选择。它不改系统 PATH,不碰 $GOROOT,所有版本装在 ~/.g/go_versions/ 下,互不干扰。
安装后直接用:go install github.com/stefanberger/g@latest
确保 $GOPATH/bin 在 PATH 里(Windows 是 %USERPROFILE%\go\bin)。
常用操作:
-
g list-remote查最新可用版本(含 rc/beta) -
g install 1.20.7安装指定 patch 版本,不带前缀 -
g use 1.26切换后,go version立即生效 - 不支持自动项目级绑定,得靠 shell hook 或手动
cd后执行
gvm 更适合团队协作与项目隔离
当你要让多个项目“记住”各自该用哪个 Go 版本,且希望每次 cd 进目录就自动加载,gvm 是更成熟的选择。它通过 .gvmrc 文件 + shell 的 cd hook 实现项目级绑定,和 nvm 行为一致。
注意几个关键点:
立即学习“go语言免费学习笔记(深入)”;
- Linux/macOS 安装命令是
bash <(curl -sSL https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer) - 必须在
~/.bashrc或~/.zshrc里加两行:source ~/.gvm/scripts/gvmexport PATH="$HOME/.gvm/bin:$PATH" -
gvm install go1.22.3 --binary强制用预编译包(默认行为),避免编译失败 - 进项目后执行
gvm use go1.21.6 --default才会生成.gvmrc
别忽略 go.mod 里的 go 指令约束
无论你用 g 还是 gvm 切到某个版本,如果项目 go.mod 里写着 go 1.25,而你硬切到 go1.24.5,go build 会直接报错:go: cannot use go 1.24.5 with go 1.25 module
这不是工具问题,是 Go 编译器本身的校验机制。所以:
- 先看
go mod edit -print | grep '^go '确认项目声明的最低版本 - 再选工具安装对应或更高版本(如声明
go 1.25,可装1.25.8或1.26.2) -
go run和go test都受此限制,不是只有go build
Windows 用户优先用官方 go install golang.org/dl/goX.Y@latest
Windows 上 g 和 gvm 支持有限(尤其 gvm 原生不支持)。此时最稳的方案是 Go 官方自带的版本下载器 —— 它本质是个独立二进制,不依赖 shell hook,也不需要额外配置。
实操步骤(PowerShell):
go install golang.org/dl/go1.26@latest-
go1.26 download(首次运行才需) - 之后直接用
go1.26 version、go1.26 run .,完全绕过全局go命令 - 不同项目写不同脚本:一个用
go1.20,一个用go1.26,零冲突
这个方式看似“笨”,但对 CI/CD、多项目并行、甚至临时调试旧版本 runtime 行为来说,反而最可靠——它根本不碰环境变量。


















