Crates.io | goup-rs |
lib.rs | goup-rs |
version | 0.13.1 |
created_at | 2023-11-30 10:03:51.137539+00 |
updated_at | 2025-07-23 00:18:59.463622+00 |
description | goup is an elegant Go version manager |
homepage | https://github.com/thinkgos/goup-rs |
repository | https://github.com/thinkgos/goup-rs |
max_upload_size | |
id | 1054052 |
size | 1,369,377 |
goup
is an elegant Go version manager write in rust.
NOTE: Please keep in mind that goup-rs
is still under active development and therefore full backward compatibility is not guaranteed before reaching v1.0.0.
git
. we may remove this dependency in future.goup install/remove [TOOLCHAIN]
.goup install <nightly|tip|gotip>
.*.tar.gz
, *.tar.gz.sha256
).goup
itself.GOUP_HOME
(default $HOME/.goup
)(>= v0.11.x);goup
is an attempt to fulfill the above features and is heavily inspired by Rustup, golang/dl, goup, goenv, gvm and getgo.
Alternatively, you can also install it using cargo
.
cargo install goup-rs
or
cargo install goup-rs --git https://github.com/thinkgos/goup-rs
goup init
, Got shell startup script at $HOME/.goup/env
.echo '. "$HOME/.goup/env"' >> ~/.bashrc
echo '. "$HOME/.goup/env"' >> ~/.zshenv
echo 'source ~/.goup/env' >> ~/.config/fish/config.fish
If you want to install manually, there are the steps:
goup
from Release Pagegoup
executable to your PATH
and make it executable: mv GOUP_BIN /usr/local/bin/goup && chmod +x /usr/local/bin/goup
goup init
, Got shell startup script at $HOME/.goup/env
.echo '. "$HOME/.goup/env"' >> ~/.bashrc
echo '. "$HOME/.goup/env"' >> ~/.zshenv
echo 'source ~/.goup/env' >> ~/.config/fish/config.fish
Install the latest version for your system with the MSI-installers from the Release Page, then run it.
goup.exe
to $YOUR_PATH
.$YOUR_PATH
to windows environment.$ 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]
can be follow value 'stable', 'unstable', 'beta' or 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
$ goup list
+--------+---------+
| Active | Version |
+--------+---------+
| | 1.21.10 |
+--------+---------+
| * | 1.22.3 |
+--------+---------+
| | tip |
+--------+---------+
goup install/update [TOOLCHAIN]
, [TOOLCHAIN]
can be follow value 'stable'(default), 'nightly'('tip', 'gotip'), 'unstable', 'beta' or '=1.21.4', --dry
flag means only install the version, but do not switch.
[TOOLCHAIN]
you can use semver
syntax to match the version, See 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]
, switches to selected Go version.
$ 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]...
Remove the specified Go version list. If no version is provided, a prompt will show to select multiple installed Go version
$ 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>
Generate the autocompletion script for the specified shell. <SHELL>
possible values: bash
, elvish
, fish
, powershell
, zsh
.
goup completion zsh > _goup
goup -h
get more information
goup completion <SHELL>
Generate the autocompletion script for the specified shell.goup [help]
Print this message or the help of the given subcommand(s).goup install/update [TOOLCHAIN]
downloads specified version of Go to$HOME/.goup/go<VERSION|tip>/go
and symlinks it to $HOME/.goup/current
.goup use/set [VERSION]
switches to selected Go version.goup ls/list/show
list all installed Go version located at $HOME/.goup
.goup remove/rm [VERSION]...
remove the specified Go version list.goup search [FILTER]
lists all available Go versions.goup cache [COMMAND]
Manage cache archive files.goup self <COMMAND>
Modify the goup installation.goup init
write all necessary environment variables and values to $HOME/.goup/env
.goup env
Show the specified goup environment variables and values.Default log level is Info
. You can use goup -v <subcommand>
or goup -vv <subcommand>
to use Debug
or Trace
level.
Compiling and Installing from source code failure?
The minimum version of Go required depends on the target version of Go, more information see source installation instructions
=
): allow updating to the latest version that exactly the version, so =1.21.4
means exactly match the version 1.21.4
.>
): allow updating to the latest version that greater than the version, so >1.21.4
means greater than 1.21.4
.>=
): allow updating to the latest version that greater than or equal the version, so <1.21.4
means greater than or equal to 1.21.4
.<
): allow updating to the latest version that less than the version, so <1.21.4
means less than 1.21.4
.<=
): allow updating to the latest version that less than or equal the version, so <1.21.4
means less than or equal 1.21.4
.~
): allow updating to the latest version that does not change the major and minor version, so ~1.21.4
means greater than or equal 1.21.4
, but less than 1.22.0
.^
): allow updating to the latest version that does not change the major version, so ^1.21.4
indicates that the version must be greater than or equal to 1.21.4
, but less than 2.0.0
.*
): The operator indicates an arbitrary version. It is usually used to allow all version numbers to match.
1.21.*
match all 1.21.x
versions.1.*.*
match all 1.x.x
versions.Go version 1.20.x or below failed to unpack.
resolved v0.10.3 above.
more information see issue #251
How to customize GOUP_HOME
? (>= v0.11.x)
goup
use the $HOME/.goup
directory as GOUP_HOME
. if you want to customize the GOUP_HOME
(most are Windows users), you can set GOUP_HOME
environment variable to use another directory, before install goup
, make sure you has set the customize GOUP_HOME
environment variable and the target directory permissions, otherwise, it may lead to surprising results, refer issue #265 #270
Some version miss sha256 file, how to install this version?
goup
(>= v0.12.x) support --skip-verify
option, if some version miss sha256 file, you can try add the option. refer issue #300 #301 #305
How to install specific version? Why cause Error: expected comma after minor version number, found 'r'
?
Sometimes, we know the exact version, we can use goup install =1.24.5
, but some version do not comply with semver
, like 1.25rc1
, we can use goup install unstable
, but this only install latest unstable version. so I add a --use-raw-version
option(>= v0.12.x), we can install any version we exactly know. refer issue #299 #306