#版本管理器 #goup #golang #工具 #rust

bin+lib goup-rs

goup 是一个优雅的 Go 版本管理器

20 个版本 (7 个重大更新)

0.9.3 2024 年 8 月 15 日
0.9.2 2024 年 6 月 6 日
0.8.2 2024 年 5 月 27 日
0.7.1 2024 年 3 月 27 日
0.2.5 2023 年 11 月 30 日

984开发工具 中排名

Download history 157/week @ 2024-04-26 15/week @ 2024-05-03 5/week @ 2024-05-17 437/week @ 2024-05-24 450/week @ 2024-05-31 93/week @ 2024-06-07 7/week @ 2024-06-14 19/week @ 2024-06-28 116/week @ 2024-07-05 100/week @ 2024-08-09

每月下载量 100

Apache-2.0 许可

105KB
2K SLoC

goup

goup 是一个用 Rust 编写的优雅的 Go 版本管理器。

Rust Crates.io MSRV Crates.io Total Downloads Crates.io Crates License Tag

goup 尝试实现上述功能,并深受 Rustupgolang/dlgoupgoenvgvmgetgo 的启发。

注意:请记住,goup-rs 仍在积极开发中,因此在达到 v1.0.0 之前,不能保证完全向后兼容。

asciicast

功能

  • 最小依赖,仅依赖于 git。我们可能在将来移除此依赖。
  • 多平台兼容(Linux、macOS & Windows)。
  • 使用 goup install/remove [TOOLCHAIN] 安装/卸载 Go 版本。
  • 支持使用 goup install <nightly|tip|gotip> 从源代码安装 Go。
  • 列出本地已安装的版本。
  • 在多个已安装版本之间切换。
  • 搜索可用的 Go 版本。
  • 管理本地缓存文件(例如 *.tar.gz*.tar.gz.sha256)。
  • 升级 goup 本身。
  • 友好的提示。
  • 应该相当快。

安装

Cargo

或者,您也可以使用 cargo 来安装。

cargo install goup-rs

或者

cargo install goup-rs --git https://github.com/thinkgos/goup-rs
  • (仅限 Linux/MacOS)运行 goup init,在 $HOME/.goup/env 中获取 Got shell 启动脚本。
  • (仅限Linux/MacOS)将Go的二进制目录添加到您的shell启动脚本中: echo '. "$HOME/.goup/env"' >> ~/.bashrcecho '. "$HOME/.goup/env"' >> ~/.zshenv

手动安装(适用于Linux/MacOS)

如果您想手动安装,请按照以下步骤操作

  • 发布页面 下载最新的 goup
  • goup 可执行文件放到您的 PATH 并使其可执行: mv GOUP_BIN /usr/local/bin/goup && chmod +x /usr/local/bin/goup
  • 运行 goup init,在 $HOME/.goup/env 获取shell启动脚本。
  • 将Go的二进制目录添加到您的shell启动脚本中: echo '. "$HOME/.goup/env"' >> ~/.bashrcecho '. "$HOME/.goup/env"' >> ~/.zshenv

手动安装(适用于Windows)

MSI安装程序

发布页面 部分使用MSI安装程序安装您系统的最新版本

二进制压缩文件

  • 发布页面 下载Windows版本的二进制压缩文件,然后解压缩。
  • 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

用法

列出所有可用的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

列出所有位于 $HOME/.goup 的已安装Go版本

$ goup list 
+--------+---------+
| Active | Version |
+--------+---------+
|        | 1.21.10 |
+--------+---------+
|   *    | 1.22.3  |
+--------+---------+
|        | tip     |
+--------+---------+

安装指定的Go版本

goup install/update [TOOLCHAIN][TOOLCHAIN]可以设置为以下值:‘stable’(默认)‘nightly’(‘tip’‘gotip’‘unstable’‘beta’‘1.21.4’--dry标志表示只安装版本,但不切换。

[TOOLCHAIN]可以使用semver语法来匹配版本

  • 精确匹配(=):允许更新到与指定版本完全一致的最新版本,因此=1.21.4表示精确匹配版本1.21.4
  • 大于(>):允许更新到小于或等于指定版本的最新版本,因此>1.21.4表示大于1.21.4
  • 大于等于(>=):允许更新到小于或等于指定版本的最新版本,因此<1.21.4表示大于等于1.21.4
  • 小于(<):允许更新到小于或等于指定版本的最新版本,因此<1.21.4表示小于1.21.4
  • 小于等于(<=):允许更新到小于或等于指定版本的最新版本,因此<1.21.4表示小于等于1.21.4
  • 波浪线(~)(~):允许更新到不改变主版本和次要版本的最新版本,因此~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 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

切换到选定的 Go 版本

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'

删除指定的 Go 版本列表

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 安装

$ 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> 可能的值:bashelvishfishpowershellzsh

goup completion zsh > _goup

更多信息

goup -h 获取更多信息

工作原理

  • goup completion <SHELL> 为指定的 shell 生成自动完成脚本。
  • goup [help] 打印此消息或给定子命令的帮助信息。
  • goup install/update [TOOLCHAIN] 下载指定的 Go 版本到 $HOME/.goup/go 并将其链接到 $HOME/.goup/current
  • goup use/set [VERSION] 切换到选定的 Go 版本。
  • goup ls/list/show 显示位于 $HOME/.goup 的所有已安装的 Go 版本。
  • goup remove/rm [VERSION]... 删除指定的 Go 版本列表。
  • goup search [FILTER] 列出所有可用的 Go 版本。
  • goup cache [COMMAND] 管理缓存归档文件。
  • goup self <COMMAND> 修改 goup 安装。
  • goup init 将所有必要的环境变量和值写入 $HOME/.goup/env
  • goup env 显示指定的 goup 环境变量和值。

如何调试

默认日志级别为 Info。您可以使用 goup -v <子命令>goup -vv <子命令> 使用 DebugTrace 级别。

常见问题解答

  • 从源代码编译和安装失败?
    所需的 Go 的最低版本取决于目标 Go 版本,更多信息请参阅 源安装说明

许可证

Apache 2.0

依赖项

~32–49MB
~873K SLoC