Simple version manager like rustup
or nvm
but for Go.
- Install, manage and switch between different versions of the Go SDK.
- Multi-shell compatible (Bash, Zsh, Nushell, Powershell)
- Multi-platform compatible (Linux, macOS & Windows).
- Tries to be as simple and "out-of-the-way" as possible.
- Should be pretty fast.
- Uses the precompiled binaries instead of compiling the sources locally.
Simply download the latest binaries from the Releases Page.
Alternatively, you can also install goup using cargo.
cargo install goup
If you want the latest unreleased version from the master
branch, use the following command.
cargo install --git https://github.com/zekroTJA/goup
After that, run the following command to setup your environment to use goup to handle your Go versions.
goup env -p
source ~/.profile
This will add the required environment variables and $PATH
extension to your .profile
file.
Alternatively, if you just want to fiddle around with the tool, you can also just apply the environment to your current terminal session.
eval "$(goup env)"
goup uses the Go Repository on GitHub to query available versions using the git ls-remote --tags
command (it is planned to add a fallback which uses the GitHub API when git
is not available on the current system). This version list is then used to download selected versions from the official download server (https://go.dev/dl/). The downloaded SDKs are then directly un-zipped and un-packed while being downloaded into goup's worksapce directory, which is in the current users home directory at $HOME/.local/goup
. All downloaded SDK versions are then stored in $HOME/.local/goup/installations
. When selecting a specific installation version, the location in the installation directory is sym-linked to $HOME/.local/goup/current
and the selected version is stored in the file $HOME/.local/goup/.current_version
.
Using the command goup env -p
, this will set the path of $HOME/.local/goup/current/go
as your GOROOT
environment variable and will add $HOME/.local/goup/current/go/bin
to the beginning of your $PATH
. This way, goup does not touch your local installation of Go and you cann roll back to before simply by removing the goup entries in your .profile
and deleting the $HOME/.local/goup
directory.
This tool is very much inspired by the both wonderful tools Schnitz' fnm and Rust's rustup.
© 2023 Ringo Hoffmann.
Covered by the MIT License.