func MustParse(verStr string) (v GoVersion) {
	if err := v.parse(verStr); err != nil {
		panic(err)
	}
	return v
}
MustParse will panic if verStr does not match the expected Go version string spec.
package golang
import (
	"fmt"
	"os/exec"
	"regexp"
	"strconv"
	"strings"
)
const (
	goVerPattern = `^go(?P<major>[0-9]+)\.(?P<minor>[0-9]+)(?:\.(?P<patch>[0-9]+)|(?P<pre>(?:alpha|beta|rc)[0-9]+))?$`
)
var (
	goVerRegexp = regexp.MustCompile(goVerPattern)
)
type GoVersion struct {
	major, minor, patch int
	prerelease          string
}
func (v GoVersion) String() string {
	switch {
	case v.patch != 0:
		return fmt.Sprintf("go%d.%d.%d", v.major, v.minor, v.patch)
	case v.prerelease != "":
		return fmt.Sprintf("go%d.%d%s", v.major, v.minor, v.prerelease)
	}
	return fmt.Sprintf("go%d.%d", v.major, v.minor)
}