While I generally use the current release of Go, sometimes I need to try a different version. For example, I need to check that all the examples in my[Guide to JSON][2]work with[both the supported releases of Go][3](1.8.6 and 1.9.3 at time of writing) along with go1.10rc1.
I primarily use the current version of Go, updating it when new versions are released. I try out other versions as needed following the methods described in this article.
### Trying Betas and Release Candidates[¶][4]
When[go1.8beta2 was released][5], a new tool for trying the beta and release candidates was also released that allowed you to`go get`the beta. It allowed you to easily run the beta alongside your Go installation by getting the beta with:
```
go get golang.org/x/build/version/go1.8beta2
```
This downloads and builds a small program that will act like the`go`tool for that specific version. The full release can then be downloaded and installed with:
```
go1.8beta2 download
```
This downloads the release from[https://golang.org/dl][6]and installs it into`$HOME/sdk`or`%USERPROFILE%\sdk`.
Now you can use`go1.8beta2`as if it were the normal Go command.
This method works for[all the beta and release candidates][7]released after go1.8beta2.
### Trying a Specific Release[¶][8]
While only beta and release candidates are provided, they can easily be adapted to work with any released version. For example, to use go1.9.2:
```
package main
import (
"golang.org/x/build/version"
)
func main() {
version.Run("go1.9.2")
}
```
Replace`go1.9.2`with the release you want to run and build/install as usual.
Since the program I use to build my[Guide to JSON][9]calls`go`itself (for each example), I build this as`go`and prepend the directory to my`PATH`so it will use this one instead of my normal version.
### Trying Any Release[¶][10]
This small program can be extended so you can specify the release to use instead of having to maintain binaries for each version.
```
package main
import (
"fmt"
"os"
"golang.org/x/build/version"
)
func main() {
if len(os.Args) <2{
fmt.Printf("USAGE: %v <version> [commands as normal]\n",
os.Args[0])
os.Exit(1)
}
v := os.Args[1]
os.Args = append(os.Args[0:1], os.Args[2:]...)
version.Run("go" + v)
}
```
I have this installed as`gov`and run it like`gov 1.8.6 version`, using the version I want to run.
### Trying a Source Build (e.g., tip)[¶][11]
I also use this same infrastructure to manage source builds of Go, such as tip. There’s just a little trick to it:
* use the directory`$HOME/sdk/go<version>`(e.g.,`$HOME/sdk/gotip`)
* [build as normal][1]
*`touch $HOME/sdk/go<version>/.unpacked-success`This is an empty file used as a sentinel to indicate the download and unpacking was successful.
(On Windows, replace`$HOME/sdk`with`%USERPROFILE%\sdk`)