最稳妥的方式是使用 gvm 管理多个 Go 版本,它专为 Go 设计,能干净隔离、轻量切换,并支持源码编译和预编译安装,避免手动修改 $GOROOT 和 $PATH 导致的冲突。

用 gvm 管理多个 Go 版本最稳妥
直接装多个 Go 二进制并手动改 $GOROOT 和 $PATH 容易冲突,尤其在 CI/CD 或多项目混用时。推荐用 gvm(Go Version Manager),它专为 Go 设计,隔离干净、切换轻量、支持源码编译和预编译安装。
安装方式(macOS/Linux):
bash <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
安装后重启 shell 或执行 source ~/.gvm/scripts/gvm。常见问题:如果提示 command not found: gvm,说明 ~/.gvm/scripts 没加入 $PATH,需在 ~/.bashrc 或 ~/.zshrc 中追加:
source ~/.gvm/scripts/gvmexport PATH="$HOME/.gvm/bin:$PATH"
安装指定版本(如 go1.21.6 和 go1.22.3)
gvm listall 可查所有可用版本;但注意:部分旧版(如 go1.19 之前)可能不显示,需手动加 --source 参数或从官网下载源码包。默认安装使用预编译二进制,速度快;若需调试运行时或打补丁,可加 --source 编译安装。
立即学习“go语言免费学习笔记(深入)”;
实操命令:
gvm install go1.21.6 gvm install go1.22.3
安装失败常见原因:
飞蛙B2B2C(FeiWa B2B2C)商城系统是山东破浪网络科技有限公司于2017年最新推出的企业级B2B2C电商平台系统,采用PHP5+MySQL技术为基础,OOP(面向对象)方式进行核心框架搭建,结合MVC模式进行开发,可以支持Windows/Unix服务器环境,需PHP5.3及以上版本支持,可运行于包括Apache、IIS和Nginx在内的多种WEB服务器。飞蛙B2B2C(FeiWa B2
- 系统缺少
gcc或g++(Linux 需build-essential,macOS 需 Xcode Command Line Tools) - 网络被墙导致下载
dl.google.com失败 → 可设置代理:export GVM_GOBIN_URL=https://golang.google.cn/dl/ - 权限不足 → 不要用
sudo gvm install,gvm默认安装到用户目录,无需 root
按项目切换 Go 版本(避免全局污染)
全局切换(gvm use go1.22.3)会影响整个终端会话,不适合同时开发多个依赖不同 Go 版本的项目。正确做法是进入项目根目录后执行:
gvm use go1.21.6 --default
这会在当前目录生成 .gvmrc 文件,内容为 export GVM_GO_VERSION="go1.21.6"。下次进入该目录时,gvm 自动加载对应版本 —— 前提是你的 shell 配置里启用了自动加载(gvm 安装时已默认配置好 cd hook)。
验证是否生效:
- 执行
go version确认输出匹配预期 - 检查
$GOROOT是否指向~/.gvm/gos/go1.21.6 - 注意:如果项目里有
go.mod的go 1.22声明,而你强制用了go1.21.6,go build会报错go: cannot use go 1.21.6 with go 1.22 module—— 这是 Go 本身限制,不是gvm问题
卸载不用的版本与清理残留
用 gvm list 查看已安装版本,用 gvm uninstall go1.18.0 即可删除。但要注意:
- 正在使用的版本无法卸载(会提示
cannot uninstall current version) - 卸载后,原
.gvmrc若仍引用该版本,进入目录时会报错go version not installed,需手动删掉或更新.gvmrc -
gvm cleanup可清空下载缓存(~/.gvm/archive),节省空间,但不影响已安装版本
真正容易被忽略的是 GOBIN:如果你曾手动设置过 GOBIN 指向某个全局 bin 目录(如 ~/go/bin),切换版本后 go install 生成的二进制仍会落在那里,可能造成跨版本命令混用。建议统一用 gvm 管理的 $GOROOT/bin,或显式重置:export GOBIN=$GOROOT/bin。









