gvm is a version management tool for the Go programming language, inspired by tools like RVM (for Ruby). It allows you to manage, install, switch between, and uninstall multiple Go versions (including “tip” or weekly snapshots). It also supports “pkgsets” (similar to virtual environments) so you can maintain isolated sets of Go package dependencies associated with specific Go versions or projects. gvm caches cleaned source copies to speed up repeated installs and helps keep your Go workspace clean. Developers use it especially when working on projects that require different Go versions (e.g. legacy code vs bleeding-edge) or when testing compatibility across releases. Because it handles both version switching and package isolation, it simplifies the friction of juggling multiple Go toolchains on the same machine.
Features
- Install and uninstall arbitrary Go versions (tags, pre-release, “tip”, etc.), supporting both source builds and binary installations
- List all available version tags with listall, optionally including weekly releases etc.
- Manage multiple GOPATHs via pkgsets (create/use/delete), including local project-specific pkgsets
- Cache clean copies of Go source to speed up repeated builds or installations
- Support linking project directories into GOPATH so one can work with code in place but still use isolation via pkgsets
- Tools for diffing added/removed files in GOROOT for Go versions (gvm diff) to see what changed between versions