Skip to content

Latest commit

 

History

History
267 lines (204 loc) · 10.8 KB

README_CN.md

File metadata and controls

267 lines (204 loc) · 10.8 KB

goup

English

goup 是一个纯Rust编写的优雅的Go版本管理工具.

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

注意: 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自我更新.
  • 支持自定义GOUP_HOME(默认$HOME/.goup)(>= v0.11.x);
  • 友好的提示.
  • 应该很快.

goup 是对上述特性的一种尝试, 其灵感主要来自于 Rustup, golang/dl, goup, goenv, gvm and getgo.

安装

使用Cargo

或者, 也可以使用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

手动安装(Linux/MacOS)

如果您想手动安装, 步骤如下:

  • 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"' >> ~/.bashrcecho '. "$HOME/.goup/env"' >> ~/.zshenv

手动安装(Windows)

MSI安装

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

使用方法

列出所有可用的go版本

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

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

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

安装指定Go版本

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

切换到选定的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                             |
+---------------------------+--------------------------------+---------------------------------------------------------------------------------+

Shell补全

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的环境变量和值.

How to Debug

默认日志级别为Info. 你可以使用goup -v <subcommand>goup -vv <subcommand> 来使用 DebugTrace 等级.

FAQ

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

  • semver

    • 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版本.
  • 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

许可证

Apache 2.0