1// Copyright 2023 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package gover
6
7import (
8	"internal/goversion"
9	"runtime"
10	"strconv"
11)
12
13// TestVersion is initialized in the go command test binary
14// to be $TESTGO_VERSION, to allow tests to override the
15// go command's idea of its own version as returned by Local.
16var TestVersion string
17
18// Local returns the local Go version, the one implemented by this go command.
19func Local() string {
20	v, _ := local()
21	return v
22}
23
24// LocalToolchain returns the local toolchain name, the one implemented by this go command.
25func LocalToolchain() string {
26	_, t := local()
27	return t
28}
29
30func local() (goVers, toolVers string) {
31	toolVers = runtime.Version()
32	if TestVersion != "" {
33		toolVers = TestVersion
34	}
35	goVers = FromToolchain(toolVers)
36	if goVers == "" {
37		// Development branch. Use "Dev" version with just 1.N, no rc1 or .0 suffix.
38		goVers = "1." + strconv.Itoa(goversion.Version)
39		toolVers = "go" + goVers
40	}
41	return goVers, toolVers
42}
43