code: func verifyGoVersion() {
  	_, err := exec.LookPath("go")
  	if err != nil {
  		log.Fatalf("Go doesn't appear to be installed ('go' isn't in your PATH). Install Go 1.%d or newer.", goVersionMinor)
  	}
  	out, err := exec.Command("go", "version").Output()
  	if err != nil {
  		log.Fatalf("Error checking Go version with the 'go' command: %v", err)
  	}
  
  	version := string(out)
  
  	// Handle non-versioned binaries
  	// ex: "go version devel +c26fac8 Thu Feb 15 21:41:39 2018 +0000 linux/amd64"
  	if strings.HasPrefix(version, "go version devel ") {
  		verifyGopherjsGoroot(" devel")
  		return
  	}
  
  	m := validVersionRx.FindStringSubmatch(version)
  	if m == nil {
  		log.Fatalf("Unexpected output while checking 'go version': %q", version)
  	}
  	minorVersion, err := strconv.Atoi(m[1])
  	if err != nil {
  		log.Fatalf("Unexpected error while parsing version string %q: %v", m[1], err)
  	}
  
  	if minorVersion < goVersionMinor {
  		log.Fatalf("Your version of Go (%s) is too old. Perkeep requires Go 1.%d or later.", string(out), goVersionMinor)
  	}
  
  	if *website || *camnetdns {
  		return
  	}
  
  	if minorVersion != gopherJSGoMinor {
  		verifyGopherjsGoroot(fmt.Sprintf("1.%d", minorVersion))
  	}
  }
docs: // verifyGoVersion runs "go version" and parses the output.  If the version is
  // acceptable a check for gopherjs versions are also done. If problems
  // are found a message is logged and we abort.