Simple shim to run the version of Go you need. Different than version managers you've used in the past.
brew install adamlamar/rungo/rungo
rungo replaces your go, gofmt, and godoc binaries. Immediately after installing you can pretend like it isn't even there:
$ go version
time="2018-05-15T18:36:39-06:00" level=info msg="Downloading file https://storage.googleapis.com/golang/go1.10.2.darwin-amd64.tar.gz"
time="2018-05-15T18:36:52-06:00" level=info msg="Successfully extracted \"/Users/alamar/.rungo/1.10.2/go1.10.2.darwin-amd64.tar.gz\""
go version go1.10.2 darwin/amd64
On the first invocation, rungo downloads the binary distribution of Go 1.10.2, extracts the tarball to ~/.rungo/<version>/, and executes go version. All future invocations simply delegate to the appropriate go command:
$ go version
go version go1.10.2 darwin/amd64
rungo can invoke any go subcommand, including build, run, tool, etc.
To specify the desired go version, set either the GO_VERSION environment variable or use a .go-version file.
Environment variable:
$ GO_VERSION=1.9.2 go version
go version go1.9.2 darwin/amd64
To set a default version, use a .go-version file in your home directory:
$ echo "1.9.2" > $HOME/.go-version
$ go version
go version go1.9.2 darwin/amd64
Or commit to your git repository on a per-project basis:
$ cd path/to/my-project
$ echo "1.9.2" > .go-version
$ git add .go-version && git commit
$ git push
# => All users of your project will now use the exact version specified
If no version is specified, rungo will invoke the latest stable golang release shipped as of this version of rungo.
Tested on Linux and OSX. Windows support is maintained on a best-effort basis. Other platforms may work, but are untested.
Currently, only OSX has package manager support using homebrew.
At a minimum, rungo can build on 1.5, but may work on prior versions. Note that rungo should be built using go build - using go run main.go will not work.
Build the rungo binary, or download the latest stable release.
Once you have the rungo binary, copy it somewhere in your path like /usr/local/bin. Then symlink the 3 go commands to the rungo binary.
Like this:
# cp rungo /usr/local/bin
# ln -s rungo go
# ln -s rungo gofmt
# ln -s rungo godoc
Done! You should be able to invoke go, gofmt, and godoc as desired.
Build the rungo.exe binary, or download the latest stable release.
Extract the latest release zip file to a temporary directory. For a quick installation, copy the extracted files (go.exe, gofmt.exe, godoc.exe)
into C:\Windows which will make them automatically part of your path.
For a cleaner installation, copy the extracted files to a different directory and add it to your PATH.
If building rungo.exe manually, copy rungo.exe to each of go.exe, gofmt.exe, and godoc.exe to the desired directory.
There are none.
Set the environment variable RUNGO_VERBOSE to any value. Example: RUNGO_VERBOSE=t go version
By default, golang archives are downloaded from https://storage.googleapis.com/golang/. To use an alternative server, set RUNGO_DOWNLOAD_BASE to another value like https://my.local.network/golang/. Don't forget the trailing /.
Delete the versioned directory you don't need anymore in ~/.rungo/<version>
rm -rf ~/.rungo
rungo "replaces" the golang binaries that would normally reside in your $PATH. For each command that rungo instruments, a symlink is used to point back to the rungo binary. On startup, rungo reads the basename of the program (i.e. the symlink name) and uses that to determine which follow-on command should be invoked. After that, rungo determines the appropriate version (downloading if necessary) and exec's with the expected arguments.
On OSX, 1.5.4.
On Linux/Windows, 1.2.2.