A command-line tool to manage multiple Go versions and isolate project dependencies via GOPATH workspaces.
GVM is a Go Version Manager that provides a streamlined interface for installing, switching between, and managing multiple Go versions on a single system. It addresses dependency conflicts and API changes that can disrupt development workflows by enabling isolated environments and separate GOPATH workspaces.
Go developers who need to work on multiple projects requiring different Go versions or isolated dependency sets, such as those maintaining legacy systems while adopting new releases.
Developers choose GVM for its ability to manage both Go versions and project-specific package sets, offering dependency isolation and native code vendoring to maintain reproducible and conflict-free development environments.
Go Version Manager
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Supports installing specific releases, weekly builds, and tip versions with commands like `gvm install go1.4` or `gvm listall`, offering broad compatibility testing.
Creates separate GOPATH workspaces using `gvm pkgset create/use/delete` to prevent conflicts between projects, ensuring reproducible environments.
Provides environment variables like `GVM_OVERLAY_PREFIX` to vendor platform-specific native code and dependencies, aiding in consistent builds for CGO projects.
Caches a clean copy of Go source code to speed up installation of multiple versions, reducing download times and network usage.
Installing Go 1.5+ requires a multi-step process with Go 1.4 and environment variable setup, as detailed in the 'A Note on Compiling Go 1.5+' section, which can be error-prone.
Requires installing additional tools like Bison, Mercurial, and build tools that vary by operating system, complicating initial setup and maintenance.
Built around GOPATH workspaces, it may not seamlessly integrate with Go modules, potentially causing confusion or extra configuration in modern Go development.
The troubleshooting note admits that file states can get mixed up during upgrades, sometimes necessitating a complete removal of `~/.gvm`, indicating instability.