gvm: Go Version Managergogolanggvm is a CLI tool for Linux, MacOS and Windows — similar to nvm / anaconda — that lets you conveniently manage and switch between multiple go environments. Highly recommended.
Installation
Mac OS X Requirements
1
2
3
4
| # Mac OS X Requirements
xcode-select --install
brew update
brew install mercurial
|
Install gvm
gvm
1
2
3
4
5
| # zsh
zsh < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
# bash use, choose one!
# bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
|
On success, a hidden .gvm directory is created under your home folder, and the following line is appended to the bottom of your .bashrc or .zshrc:
1
2
3
4
| [[ -s "$HOME/.gvm/scripts/gvm" ]] && source "$HOME/.gvm/scripts/gvm"
# shall set GO_SOURCE_URL to speed binary install
export GO_SOURCE_URL=https://github.com/golang/go
|
To support multiple shells at the same time, copy the snippet above into each shell’s config file manually.
Go environment config
Switching go versions with gvm use <version> changes several environment variables, such as:
GOMODCACHE="$HOME/.gvm/pkgsets/go1.17.7/global/pkg/mod"GOPATH="$HOME/.gvm/pkgsets/go1.17.7/global"
The related gvm commands are: linkthis, pkgset, pkgenv. To reduce the impact of these env changes on development, you can pin GOPATH and friends:
1
2
3
4
5
6
7
8
9
10
11
| # shall set GO_SOURCE_URL to speed source install
# default https://go.googlesource.com/go
export GO_SOURCE_URL=https://github.com/golang/go
# if use gvm, shall set some go env after gvm init statements
# export GO111MODULE=on
export GOPATH="$HOME/go"
export GOBIN="$GOPATH/bin"
export PATH="$GOBIN:$PATH"
export GOPROXY=https://goproxy.cn,https://goproxy.io/,https://mirrors.aliyun.com/goproxy/,https://gocenter.io/,https://proxy.golang.org,direct
|
gvm usage
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| Usage: gvm [command]
Description:
GVM is the Go Version Manager
Commands:
version - print the gvm version number
get - gets the latest code (for debugging)
use - select a go version to use (--default to set permanently)
diff - view changes to Go root
help - display this usage text
implode - completely remove gvm
install - install go versions
uninstall - uninstall go versions
cross - install go cross compilers
linkthis - link this directory into GOPATH
list - list installed go versions
listall - list available versions
alias - manage go version aliases
pkgset - manage go packages sets
pkgenv - edit the environment for a package set
|
gvm install
1
2
3
4
5
6
7
8
| Usage: gvm install [version] [options]
-s, --source=SOURCE Install Go from specified source.
-n, --name=NAME Override the default name for this version.
-pb, --with-protobuf Install Go protocol buffers.
-b, --with-build-tools Install package build tools.
-B, --binary Only install from binary.
--prefer-binary Attempt a binary install, falling back to source.
-h, --help Display this message.
|
Quick start
gvm use - select a go version to use (–default to set permanently)
- gvm install go1.16.14 -B # if the machine has no go pre-installed
- gvm install go1.17.7
- gvm use go1.17.7 [–default]
- gvm uninstall go1.17.7
- gvm install go1.17.7 –source=https://xxx@github.com/xxx/go
- gvm install go1.17.7 -s=https://godoc.org/golang.org/dl/go1.17.7
- gvm implode uninstall gvm
Example
1
2
3
4
5
6
7
8
| # gvm list
gvm gos (installed)
go1.16.14
=> go1.17.7
go1.18rc1
system
|