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