21 releases (7 breaking)
new 0.9.4 | Oct 28, 2024 |
---|---|
0.9.2 | Jun 6, 2024 |
0.7.1 | Mar 27, 2024 |
0.2.9 | Dec 29, 2023 |
0.2.5 | Nov 30, 2023 |
#2078 in Development tools
59 downloads per month
105KB
2K
SLoC
goup
goup
is an elegant Go version manager write in rust.
goup
is an attempt to fulfill the above features and is heavily inspired by Rustup, golang/dl, goup, goenv, gvm and getgo.
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.
Features
- Minimum dependencies, only depend on
git
. we may remove this dependency in future. - Multi-platform compatible (Linux, macOS & Windows).
- Install/Remove Go versions with
goup install/remove [TOOLCHAIN]
. - Support Installing Go from source with
goup install <nightly|tip|gotip>
. - List locally installed versions.
- Switch between multiple installed versions.
- Search available version of Go.
- Manage locally cache files(such as
*.tar.gz
,*.tar.gz.sha256
). - Upgrade
goup
itself. - Friendly prompt.
- Should be pretty fast.
Installation
Cargo
Alternatively, you can also install it using cargo
.
cargo install goup-rs
or
cargo install goup-rs --git https://github.com/thinkgos/goup-rs
- (Only Linux/MacOS)Run
goup init
, Got shell startup script at$HOME/.goup/env
. - (Only Linux/MacOS)Add the Go bin directory to your shell startup script:
echo '. "$HOME/.goup/env"' >> ~/.bashrc
orecho '. "$HOME/.goup/env"' >> ~/.zshenv
Manual(for Linux/MacOS)
If you want to install manually, there are the steps:
- Download the latest
goup
from Release Page - Drop the
goup
executable to yourPATH
and make it executable:mv GOUP_BIN /usr/local/bin/goup && chmod +x /usr/local/bin/goup
- Run
goup init
, Got shell startup script at$HOME/.goup/env
. - Add the Go bin directory to your shell startup script:
echo '. "$HOME/.goup/env"' >> ~/.bashrc
orecho '. "$HOME/.goup/env"' >> ~/.zshenv
Manual(for Windows)
MSI-installers
Install the latest version for your system with the MSI-installers from the Release Page section
Binary Compressed
- Download the binary compressed file for Windows version from Release Page, and then unzipping it.
- Move the
goup.exe
to$YOUR_PATH
. - Add the
$YOUR_PATH
to windows environment.
Quick Start
$ 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
Usage
Lists all available Go versions
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
List all installed Go version located at $HOME/.goup
$ goup list
+--------+---------+
| Active | Version |
+--------+---------+
| | 1.21.10 |
+--------+---------+
| * | 1.22.3 |
+--------+---------+
| | tip |
+--------+---------+
Install specified version of Go
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:
- exact(
=
): allow updating to the latest version that exactly the version, so=1.21.4
means exactly match the version1.21.4
. - greater(
>
): allow updating to the latest version that less than or equal the version, so>1.21.4
means greater than1.21.4
. - greater equal(
>=
): allow updating to the latest version that less than or equal the version, so<1.21.4
means greater than or equal to1.21.4
. - less(
<
): allow updating to the latest version that less than or equal the version, so<1.21.4
means less than1.21.4
. - less equal(
<=
): allow updating to the latest version that less than or equal the version, so<1.21.4
means less than or equal1.21.4
. - tilde(
~
): allow updating to the latest version that does not change the major and minor version, so~1.21.4
means greater than or equal1.21.4
, but less than1.22.0
. - caret(
^
): 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 to1.21.4
, but less than2.0.0
. - wildcard(
*
): The operator indicates an arbitrary version. It is usually used to allow all version numbers to match.1.21.*
match all1.21.x
versions.1.*.*
match all1.x.x
versions.
$ 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
Switches to selected Go version
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'
Remove the specified Go version list
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
Manage cache archive files
$ 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
Modify the goup installation
$ 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`!
Environment
$ 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 |
+---------------------------+--------------------------------+---------------------------------------------------------------------------------+
Autocompletion
goup completion <SHELL>
Generate the autocompletion script for the specified shell. <SHELL>
possible values: bash
, elvish
, fish
, powershell
, zsh
.
goup completion zsh > _goup
More information
goup -h
get more information
How it works
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.
How to Debug
Default log level is Info
. You can use goup -v <subcommand>
or goup -vv <subcommand>
to use Debug
or Trace
level.
FAQ
- 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
License
Dependencies
~33–50MB
~886K SLoC