goup 是一款高效的 Go 版本管理工具,具备以下核心功能:
- 依赖极简,仅需依赖于
(仅git
版本需要nightly|tip|gotip
)。git - 支持跨平台运行,兼容 Linux、macOS 和 Windows 系统。
- 可通过
方式安装或卸载指定的 Go 版本。goup install/remove [TOOLCHAIN] - 支持从源码构建安装 Go,此功能需系统已安装
。git - 可列出当前本地已安装的所有 Go 版本。
- 允许在多个已安装版本之间自由切换。
- 支持搜索远程可用的 Go 发行版本。
- ? 提供 shell 会话级的版本控制能力(>= v0.15.x)。
- ? 支持多种下载后端引擎
/GOUP_GO_REGISTRY_INDEX
(>= v0.16.x)。GOUP_GO_REGISTRY - 支持管理本地缓存文件,如
和*.tar.gz
。*.tar.gz.sha256 - 内置
自我更新机制。goup - 支持自定义
源(默认使用GOUP_HOME
),适用于 >= v0.11.x 版本。$HOME/.goup - 提供清晰友好的用户提示信息。
- 执行速度快,响应高效。
goup 是对上述功能的一次实践尝试,其设计灵感来源于多个开源项目,包括 Rustup、golang/dl、goup、goenv、gvm 以及 getgo。
构建特性标志
可通过编译选项关闭自我更新功能:
no-self-update —— 禁用自动更新机制。
安装方式
通过 Cargo 安装
推荐使用 Cargo 进行安装:
cargo install goup-rs
或从 GitHub 仓库直接安装:
cargo install goup-rs --git https://github.com/thinkgos/goup-rs
(仅支持 Linux/macOS)
安装完成后运行
,获取 shell 启动脚本路径 goup init
。$HOME/.goup/env
随后将 Go 的 bin 目录添加至 shell 配置中:
Bash:
echo '. "$HOME/.goup/env"' >> ~/.bashrc
Zsh:
echo '. "$HOME/.goup/env"' >> ~/.zshenv
Fish:
echo 'source ~/.goup/env' >> ~/.config/fish/config.fish
手动安装(Linux/macOS)
- 前往 Release 页面下载最新的
可执行文件。goup - 将其移至
并赋予执行权限:PATHmv GOUP_BIN /usr/local/bin/goup && chmod +x /usr/local/bin/goup - 运行
获取 shell 初始化脚本位置goup init
。$HOME/.goup/env - 将 Go 的 bin 路径加入 shell 启动脚本:
Bash:
echo '. "$HOME/.goup/env"' >> ~/.bashrc
Zsh:
echo '. "$HOME/.goup/env"' >> ~/.zshenv
Fish:
echo 'source ~/.goup/env' >> ~/.config/fish/config.fish
Windows 手动安装
MSI 安装方式
从 Release 页面下载最新版
的 MSI 安装包并运行即可完成安装。goup
二进制解压方式
- 从 Release 页面下载最新的
二进制压缩包并解压。goup - 将解压后的
文件移动到goup.exe
目录下。$YOUR_PATH - 将
添加至系统的环境变量 PATH 中。$YOUR_PATH
快速入门示例
$ goup install
[2024-01-30T00:38:48Z INFO ] Installing go1.21.10 ...
[2024-01-30T00:38:48Z INFO ] Unpacking /home/thinkgo/.goup/go1.21.10/go1.21.10.linux-amd64.tar.gz ...
[2024-01-30T00:38:48Z INFO ] go1.21.10 installed in /home/thinkgo/.goup/go1.21.10
[2024-01-30T00:38:48Z INFO ] Default Go is set to 'go1.21.10'
$ goup list
1.21.10 (active, default)
$ go env GOROOT
/home/thinkgo/.goup/current
$ go version
go version go1.21.10 linux/amd64
$ GOUP_GO_REGISTRY_INDEX=https://golang.google.cn goup install =1.21.10
常用命令说明
搜索可用的 Go 版本
使用以下命令查看所有可安装的版本列表:
goup search [FILTER][FILTER]
支持的关键字包括:
‘stable’、‘unstable’、‘beta’ 或任意正则表达式字符串。
示例:
$ goup search 1
...
1.21rc4
1.22rc1
$ goup search stable
1
...
1.21.4
1.21.5
1.21.10
列出已安装的 Go 版本
查询位于
路径下的所有已安装 Go 版本:$HOME/.goup
$ goup list
1.21.10
1.22.3 (active, default)
tip
安装指定版本的 Go
支持如下格式进行安装:
goup install/update [TOOLCHAIN][TOOLCHAIN]
可接受的值包括:
‘stable’(默认)、‘nightly’(即 ‘tip’ 或 ‘gotip’)、‘unstable’、‘beta’、‘=1.21.4’ 等。
附加说明:
--dry 表示仅安装该版本而不激活切换。[TOOLCHAIN] 支持 semver 语法匹配目标版本,更多细节请参考 FAQ 文档。
示例:
$ goup install 1.21.*
gitnightly|tip|gotipgoup install/remove [TOOLCHAIN]goup install <nightly|tip|gotip>GOUP_GO_REGISTRY_INDEXGOUP_GO_REGISTRY*.tar.gz*.tar.gz.sha256goupGOUP_HOME$HOME/.goupgoupno-self-updatecargogoup init$HOME/.goup/envecho '. "$HOME/.goup/env"' >> ~/.bashrcecho '. "$HOME/.goup/env"' >> ~/.zshenvecho 'source ~/.goup/env' >> ~/.config/fish/config.fishPATHmv GOUP_BIN /usr/local/bin/goup && chmod +x /usr/local/bin/goupgoup.exe$YOUR_PATHgoup search [FILTER][FILTER]$HOME/.goupgoup install/update [TOOLCHAIN][TOOLCHAIN]--drysemver[2024-01-30T00:38:48Z INFO ] 正在安装 go1.21.10 ... [2024-01-30T00:38:48Z INFO ] 正在解压 /home/thinkgo/.goup/go1.21.10/go1.21.10.linux-amd64.tar.gz ... [2024-01-30T00:38:48Z INFO ] go1.21.10 已成功安装至 /home/thinkgo/.goup/go1.21.10 [2024-01-30T00:38:48Z INFO ] 默认 Go 版本已设置为 'go1.21.10' 执行如下命令可预览安装过程: $ goup install =1.21.4 --dry [2024-01-30T00:38:48Z INFO ] 正在安装 go1.21.4 ... [2024-01-30T00:38:48Z INFO ] 正在解包文件 /home/thinkgo/.goup/go1.21.4/go1.21.4.linux-amd64.tar.gz ... [2024-01-30T00:38:48Z INFO ] go1.21.10 已安装于 /home/thinkgo/.goup/go1.21.4
切换并设定默认的 Go 版本
通过交互式选择器指定系统默认使用的 Go 版本。
$ goup default
? 请选择一个版本?
1.21.5
* 1.21.10
tip
[2024-01-30T00:38:48Z INFO ] 默认 Go 版本已更新为 'go1.21.10'
goup default/use/set [VERSION]
移除已安装的 Go 版本
支持从系统中删除指定的多个 Go 版本。若未直接指定版本号,将进入多选模式供用户挑选。
$ goup rm ? 请选择要删除的多个版本? ? 1.21.5 ? 1.21.10 ? tip ? 已选择版本 · 1.21.5
goup remove/rm [VERSION]...
在当前 Shell 会话中使用特定 Go 版本
允许临时切换当前终端会话所使用的 Go 版本。若未明确指定版本,工具将尝试根据当前路径下的项目配置自动识别所需版本(可通过特定方式跳过此步骤),若仍无法确定,则提示用户手动选择。
$ goup shell 1.21.10 ? 请选择版本? 1.21.5 * 1.21.10 tip $ go version go version go1.21.10 linux/amd64
goup shell [VERSION]
go.work
go.mod
--skip-autodetect
查看已安装的 Go 版本列表
列出所有已安装的 Go 版本,并标注当前激活及默认版本。
$ goup list 1.21.10 1.22.3 (active, default) tip
缓存管理:查看与清理归档文件
可查询本地缓存中的安装包及其校验信息,并支持清理以释放磁盘空间。
$ goup cache show --contain-sha256 go1.21.10.linux-amd64.tar.gz go1.21.10.linux-amd64.tar.gz.sha256 $ goup cache clean ? 确认清除缓存文件? · yes
更新 goup 自身程序
检查并升级 goup 工具到最新发布版本。
$ goup self update
Checking target-arch... x86_64-unknown-linux-gnu
Checking current version... v0.9.0
Checking latest released version... v0.9.0
[2024-01-30T00:38:48Z INFO ] 更新状态:已是最新版本 `v0.9.0`!
goup
显示环境变量配置信息
输出当前 goup 所依赖或设置的关键环境变量及其说明。
$ goup env +------------------------+--------------------------------+--------------------------------------------------------------+ | Key | Value | Explain | +------------------------+--------------------------------+--------------------------------------------------------------+
| 环境变量名称 | 默认值 | 说明 |
|---|---|---|
| GOUP_HOME | /home/thinkgo/.goup | goup 主目录路径,默认为 '$HOME/.goup' |
| GOUP_GO_VERSION | current | 当前 shell 会话的目标 Go 版本,默认为 'current' |
| GOUP_GO_REGISTRY_INDEX | https://golang.google.cn | Go 版本的索引镜像地址 |
| GOUP_GO_REGISTRY | https://dl.google.com/go | Go 归档文件的下载仓库地址 |
| GOUP_GO_SOURCE_GIT_URL | https://github.com/golang/go | 用于获取 tip 或 nightly 版本的源码 Git 地址,也可作为版本索引 |
| GOUP_GO_SOURCE_GIT_URL | https://go.googlesource.com/go | tip 或 nightly 版本的上游 Git 源地址 |
Shell 补全功能
可通过命令为指定的 Shell 生成自动补全脚本。
goup completion <SHELL>
<SHELL>
bash
elvish
fish
powershell
zsh
支持的 Shell 类型包括:
执行以下命令可生成 zsh 补全脚本:
goup completion zsh > _goup
镜像站配置
可根据网络环境选择合适的镜像站点以提升下载速度和稳定性。
索引镜像站列表
| 来源 | 地址 | 使用方式 | 备注 |
|---|---|---|---|
| 官方1(默认) | https://go.dev | 或 |
|
| 官方2 | https://golang.google.cn | |
|
| 官方git 1 | https://github.com/golang/go | 或 |
通过 git 同步源码 |
| 官方git 2 | https://go.googlesource.com/go | |
通过 git 同步源码 |
| 阿里云 | https://mirrors.aliyun.com/golang | |
|
| 南京大学 | https://mirrors.nju.edu.cn/golang | |
|
| 华中科技大学 | https://mirrors.hust.edu.cn/golang | |
仓库镜像站列表
| 来源 | 地址 | 支持 SHA256 校验 | 支持 HTTP 获取压缩包长度 | 备注 |
|---|---|---|---|---|
| 官方1(默认) | https://dl.google.com/go | ? | ? | |
| 官方2 | https://go.dev/dl | ? | ? | |
| 官方3 | https://golang.org/dl | ? | ? | |
| 阿里云 | https://mirrors.aliyun.com/golang | ? | ? | |
| 南京大学 | https://mirrors.nju.edu.cn/golang | ? | ? | |
| 华中科技大学 | https://mirrors.hust.edu.cn/golang | ? | ? | |
| 中国科学技术大学 | https://mirrors.ustc.edu.cn/golang | ? | ? | ? 不建议使用 |
注意:部分镜像站未提供 SHA256 校验文件,在使用时需添加如下选项:
ngx-fancy-index|https://mirrors.hust.edu.cn/golang
--skip-verify
环境变量设置示例
# 推荐配置
# export GOUP_GO_REGISTRY_INDEX='ngx-fancy-index|https://mirrors.nju.edu.cn/golang'
# export GOUP_GO_REGISTRY_INDEX='git|https://github.com/golang/go'
export GOUP_GO_REGISTRY_INDEX=https://go.dev
export GOUP_GO_REGISTRY=https://mirrors.hust.edu.cn/golang
工作原理说明
该工具通过读取环境变量配置,结合指定的镜像源来管理 Go 的不同版本。根据用户指令从对应仓库下载、校验并安装所需的 Go 版本。
goup completion <SHELL>
同样地,可通过以下命令为当前 shell 生成补全脚本以提升操作效率。
goup [help]
获取更多帮助信息
运行以下命令查看详细文档和支持选项:
goup -h显示此信息或指定子命令的帮助文档。
下载选定的 Go 版本至
$HOME/.goup/go<VERSION|tip>/go
并创建一个符号链接指向
$HOME/.goup/current
goup default/use/set [VERSION]
设定默认使用的 Go 版本。
goup ls/list/show
列出所有已安装的 Go 版本位置。
$HOME/.goup
goup remove/rm [VERSION]...
删除列出的一个或多个指定 Go 版本。
goup search/ls-remote [FILTER]
展示所有可获取的 Go 版本列表。
goup cache [COMMAND]
管理本地缓存中的归档文件。
goup self <COMMAND>
对
goup
安装程序进行配置修改。
goup init [SHELL]
将所有必需的环境变量及其对应值写入
$HOME/.goup/env
goup env
查看
goup
当前设置的环境变量与数值。
goup shell [VERSION]
如何在 Shell 会话中使用特定 Go 版本?
从 goup-rs v0.15.x 开始,支持在单个
shell
会话中切换指定的 Go 版本。若使用的是
goup shell
在
*nix
系统上,请先执行
goup init
这是因为旧版的
env
文件未包含
GOUP_GO_VERSION
环境变量定义。而在
Windows
系统中,仅支持
powershell
如果系统中
COMSPEC
已关联到 PowerShell,则通常无需额外操作。详见 issue #360。
调试方法
默认日志级别为
Info
可通过使用
goup -v <subcommand>
或
goup -vv <subcommand>
来启用
Debug
或
Trace
级别的日志输出。
常见问题解答(FAQ)
编译和安装源码失败?
所需最低 Go 版本取决于目标 Go 的版本,具体要求请参考
semver
中的说明。
Go 版本 ≤ 1.20.x 解压失败?
该问题已在 v0.10.3 以上版本中修复。更多详情请查看 issue #251。
如何自定义
GOUP_HOME
(适用于 ≥ v0.11.x)?
默认使用
$HOME/.goup
目录作为
GOUP_HOME
如需自定义路径(尤其适用于 Windows 用户),可在安装
goup
前设置
GOUP_HOME
环境变量,并确保目标目录具备正确权限,否则可能导致异常行为。详见 issue #265 和 #270。
某些版本缺少 sha256 校验文件,如何安装?
从 goup-rs ≥ v0.12.x 起,支持使用
--skip-verify
选项跳过校验。若某版本无 sha256 文件,可尝试添加此选项进行安装。详见 issue #300、#301、#305。
如何安装确切指定的版本?为何出现错误
Error: expected comma after minor version number, found 'r'
?
虽然可以使用
goup install =1.24.5
来指定版本,但部分版本不符合
semver
规范,例如
1.25rc1
此时可使用
goup install unstable
但这只能获取最新的不稳定版本。为此,goup-rs(≥ v0.12.x)引入了
--use-raw-version
选项,允许用户安装任何已知确切版本。详见 issue #299 和 #307。
版本更新策略说明
- exact(
=
):仅允许更新为与指定版本完全一致的最新版本。例如:
=1.21.4
表示必须严格等于
1.21.4 - greater(
>
):允许更新为高于指定版本的最新版本。例如:
>1.21.4
表示大于
1.21.4 - greater equal(
>=
):允许更新为大于或等于指定版本的最新版本。例如:
>1.21.4
表示大于或等于
1.21.4 - less(
<
):允许更新为低于指定版本的最新版本。例如:
>1.21.4
表示小于
1.21.4 - less equal(
<=
):允许更新为小于或等于指定版本的最新版本。例如:
>1.21.4
表示小于或等于
1.21.4 - tilde(
~
):允许次版本内更新,主版本不变。例如:
~1.21.4
表示版本 ≥
1.21.4
但
1.22.0 - caret(
^
):允许在主要版本不变的前提下更新。例如:
^1.21.4
表示版本必须 ≥
1.21.4
且
2.0.0 - wildcard(
*
):通配符操作符,表示匹配任意版本号,常用于允许所有版本通过。
1.21.*
可匹配所有
1.21.x
版本。
1.*.*
可匹配所有
1.x.x
版本。
goup install/update/i [TOOLCHAIN]
goup
$HOME/.goup/env

雷达卡


京公网安备 11010802022788号







