goup
是一个纯Rust编写的优雅的Go版本管理工具.
注意: goup-rs
仍在积极开发中, 因此在达到v1.0.0之前不能保证完全向后兼容
- 最小依赖, 仅依赖于
git
. 此依赖将会在未来删除. - 跨平台的能力(Linux, macOS & Windows).
- 支持使用
goup install/remove [TOOLCHAIN]
安装/卸载 Go版本. - 支持使用
goup install <nightly|tip|gotip>
从源码安装Go. - 支持列出本地已安装的版本.
- 支持在多个已安装的版本中切换.
- 支持搜索可用的Go版本.
- 支持管理本地缓存文件(如
*.tar.gz
,*.tar.gz.sha256
). - 支持
goup
自我更新. - 支持自定义
GOUP_HOME
(默认$HOME/.goup
)(>= v0.11.x); - 友好的提示.
- 应该很快.
goup
是对上述特性的一种尝试, 其灵感主要来自于 Rustup, golang/dl, goup, goenv, gvm and getgo.
或者, 也可以使用cargo
安装.
cargo install goup-rs
或
cargo install goup-rs --git https://github.com/thinkgos/goup-rs
- (仅支持 Linux/MacOS) 运行
goup init
, 获取到shell启动脚本位于$HOME/.goup/env
. - (仅支持 Linux/MacOS) 在shell启动脚本中添加Go的bin目录:
echo '. "$HOME/.goup/env"' >> ~/.bashrc
或者echo '. "$HOME/.goup/env"' >> ~/.zshenv
如果您想手动安装, 步骤如下:
- 从Release Page下载最新的
goup
. - 将
goup
可执行文件放到PATH
中, 并给予可执行权限:mv GOUP_BIN /usr/local/bin/goup && chmod +x /usr/local/bin/goup
- 运行
goup init
, 获取到shell启动脚本位于$HOME/.goup/env
. - 在shell启动脚本中添加Go的bin目录:
echo '. "$HOME/.goup/env"' >> ~/.bashrc
或echo '. "$HOME/.goup/env"' >> ~/.zshenv
从Release Page下载最新的goup
的MSI安装程序并运行.
- 从Release Page下载最新的
goup
的二进制程序并解压. - 将
goup.exe
移至$YOUR_PATH
. - 将
$YOUR_PATH
加到windows环境变量中.
$ 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
| ACTIVE | VERSION |
|---------|---------|
| * | 1.21.10 |
$ go env GOROOT
/home/thinkgo/.goup/current
$ go version
go version go1.21.10 linux/amd64
$ GOUP_GO_HOST=https://golang.google.cn goup install =1.21.10
goup search [FILTER]
, [FILTER]
支持的值: 'stable', 'unstable', 'beta' 或 any regex string.
$ goup search
1
...
1.21rc4
1.22rc1
$ goup search stable
1
...
1.21.4
1.21.5
1.21.10
$ goup list
+--------+---------+
| Active | Version |
+--------+---------+
| | 1.21.10 |
+--------+---------+
| * | 1.22.3 |
+--------+---------+
| | tip |
+--------+---------+
goup install/update [TOOLCHAIN]
, [TOOLCHAIN]
支持的值: 'stable'(default), 'nightly'('tip', 'gotip'), 'unstable', 'beta' 或 '=1.21.4', --dry
表示只安装对应版本, 但并不切换使用.
[TOOLCHAIN]
支持semver
语法匹配对应版本, 详情查看FAQ
$ goup install 1.21.*
[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 install =1.21.4 --dry
[2024-01-30T00:38:48Z INFO ] Installing go1.21.4 ...
[2024-01-30T00:38:48Z INFO ] Unpacking /home/thinkgo/.goup/go1.21.4/go1.21.4.linux-amd64.tar.gz ...
[2024-01-30T00:38:48Z INFO ] go1.21.10 installed in /home/thinkgo/.goup/go1.21.4
goup use/set [VERSION]
, 切换到选定的Go版本.
$ goup use
? Select a version ›
1.21.5
❯ 1.21.10
tip
[2024-01-30T00:38:48Z INFO ] Default Go is set to 'go1.21.10'
goup remove/rm [VERSION]...
删除指定的 Go 版本列表. 如果没有提供版本, 将提示选择多个已安装的 Go 版本
$ goup rm
? Select multiple version ›
✔ 1.21.5
⬚ 1.21.10
⬚ tip
✔ Select multiple version · 1.21.5
$ goup cache show --contain-sha256
go1.21.10.linux-amd64.tar.gz
go1.21.10.linux-amd64.tar.gz.sha256
$ goup cache clean
✔ Do you want to clean cache file? · yes
$ 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 ] Update status: `v0.9.0`!
$ goup env
+---------------------------+--------------------------------+---------------------------------------------------------------------------------+
| Key | Value | Explain |
+---------------------------+--------------------------------+---------------------------------------------------------------------------------+
| GOUP_GO_HOST | https://golang.google.cn | Get upstream latest/all go version, use by 'install'/'search' |
+---------------------------+--------------------------------+---------------------------------------------------------------------------------+
| GOUP_GO_DOWNLOAD_BASE_URL | https://dl.google.com/go | Download go archive file base url, use by 'install' |
+---------------------------+--------------------------------+---------------------------------------------------------------------------------+
| GOUP_GO_SOURCE_GIT_URL | https://github.com/golang/go | Upstream source git url and get upstream go versions, use by 'install'/'search' |
+---------------------------+--------------------------------+---------------------------------------------------------------------------------+
| GOUP_GO_SOURCE_GIT_URL | https://go.googlesource.com/go | Upstream source git url, use by 'install' the gotip |
+---------------------------+--------------------------------+---------------------------------------------------------------------------------+
goup completion <SHELL>
为指定shell生成补全脚本. <SHELL>
支持这些值: bash
, elvish
, fish
, powershell
, zsh
.
goup completion zsh > _goup
执行goup -h
获取更多信息
goup completion <SHELL>
为指定shell生成补全脚本.goup [help]
打印此信息或给定子命令的帮助信息.goup install/update [TOOLCHAIN]
下载指定的Go版本到$HOME/.goup/go<VERSION|tip>/go
并创建一个软链接到$HOME/.goup/current
.goup use/set [VERSION]
切换到选择的Go版本.goup ls/list/show
列出所有位置$HOME/.goup
已安装的Go版本.goup remove/rm [VERSION]...
移除指定的Go版本列表.goup search [FILTER]
列出所有可用的 o版本.goup cache [COMMAND]
管理缓存归档文件.goup self <COMMAND>
修改goup
安装程序.goup init
将所有必要的环境变量和值写入$HOME/.goup/env
.goup env
显示goup
的环境变量和值.
默认日志级别为Info
. 你可以使用goup -v <subcommand>
或 goup -vv <subcommand>
来使用 Debug
或 Trace
等级.
-
编译和安装源代码失败?
所需的Go最低版本取决于Go的目标版本, 更多信息请参见source installation instructions -
- 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
版本.
- exact(
-
Go版本小于等于1.20.x解压失败.
大于v0.10.3版本已解决. 看多信息查看issue #251 -
如何自定义
GOUP_HOME
? (>= v0.11.x)
goup
使用$HOME/.goup
目录作为GOUP_HOME
. 如果需要自定义GOUP_HOME
(大多数是Windows用户), 可以设置GOUP_HOME
环境变量来使用其他目录, 安装goup
之前, 请确保已设置自定义GOUP_HOME
环境变量和目标目录权限, 否则可能会导致令人惊讶的结果, 请参阅issue #265 #270