goup 是一款高效的 Go 版本管理工具,具备以下核心功能:
git(仅 nightly|tip|gotip 版本需要 git)。goup install/remove [TOOLCHAIN] 方式安装或卸载指定的 Go 版本。git。GOUP_GO_REGISTRY_INDEX / GOUP_GO_REGISTRY(>= v0.16.x)。*.tar.gz 和 *.tar.gz.sha256。goup 自我更新机制。GOUP_HOME 源(默认使用 $HOME/.goup),适用于 >= v0.11.x 版本。goup 是对上述功能的一次实践尝试,其设计灵感来源于多个开源项目,包括 Rustup、golang/dl、goup、goenv、gvm 以及 getgo。
可通过编译选项关闭自我更新功能:
no-self-update —— 禁用自动更新机制。
推荐使用 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
goup 可执行文件。PATH 并赋予执行权限:mv GOUP_BIN /usr/local/bin/goup && chmod +x /usr/local/bin/goupgoup init 获取 shell 初始化脚本位置 $HOME/.goup/env。Bash:
echo '. "$HOME/.goup/env"' >> ~/.bashrc
Zsh:
echo '. "$HOME/.goup/env"' >> ~/.zshenv
Fish:
echo 'source ~/.goup/env' >> ~/.config/fish/config.fish
从 Release 页面下载最新版
的 MSI 安装包并运行即可完成安装。goup
goup 二进制压缩包并解压。goup.exe 文件移动到 $YOUR_PATH 目录下。$YOUR_PATH 添加至系统的环境变量 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
使用以下命令查看所有可安装的版本列表:
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 版本:$HOME/.goup
$ goup list
1.21.10
1.22.3 (active, default)
tip
支持如下格式进行安装:
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 版本。
$ 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 版本。若未直接指定版本号,将进入多选模式供用户挑选。
$ goup rm ? 请选择要删除的多个版本? ? 1.21.5 ? 1.21.10 ? tip ? 已选择版本 · 1.21.5
goup remove/rm [VERSION]...
允许临时切换当前终端会话所使用的 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 版本,并标注当前激活及默认版本。
$ 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 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 生成自动补全脚本。
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]
从 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
级别的日志输出。
编译和安装源码失败?
所需最低 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。
==1.21.41.21.4>>1.21.41.21.4>=>1.21.41.21.4<>1.21.41.21.4<=>1.21.41.21.4~~1.21.41.21.41.22.0^^1.21.41.21.42.0.0*1.21.*1.21.x1.*.*1.x.xgoup install/update/i [TOOLCHAIN]
goup
$HOME/.goup/env
扫码加好友,拉您进群



收藏
