Source File
vers.go
Belonging Package
go/build/constraint
// Copyright 2023 The Go Authors. All rights reserved.// Use of this source code is governed by a BSD-style// license that can be found in the LICENSE file.package constraintimport ()// GoVersion returns the minimum Go version implied by a given build expression.// If the expression can be satisfied without any Go version tags, GoVersion returns an empty string.//// For example://// GoVersion(linux && go1.22) = "go1.22"// GoVersion((linux && go1.22) || (windows && go1.20)) = "go1.20" => go1.20// GoVersion(linux) = ""// GoVersion(linux || (windows && go1.22)) = ""// GoVersion(!go1.22) = ""//// GoVersion assumes that any tag or negated tag may independently be true,// so that its analysis can be purely structural, without SAT solving.// “Impossible” subexpressions may therefore affect the result.//// For example://// GoVersion((linux && !linux && go1.20) || go1.21) = "go1.20"func ( Expr) string {:= minVersion(, +1)if < 0 {return ""}if == 0 {return "go1"}return "go1." + strconv.Itoa()}// minVersion returns the minimum Go major version (9 for go1.9)// implied by expression z, or if sign < 0, by expression !z.func minVersion( Expr, int) int {switch z := .(type) {default:return -1case *AndExpr::= andVersionif < 0 {= orVersion}return ((.X, ), (.Y, ))case *OrExpr::= orVersionif < 0 {= andVersion}return ((.X, ), (.Y, ))case *NotExpr:return (.X, -)case *TagExpr:if < 0 {// !foo implies nothingreturn -1}if .Tag == "go1" {return 0}, , := strings.Cut(.Tag, "go1."), := strconv.Atoi()if != nil {// not a go1.N tagreturn -1}return}}// andVersion returns the minimum Go version// implied by the AND of two minimum Go versions,// which is the max of the versions.func andVersion(, int) int {if > {return}return}// orVersion returns the minimum Go version// implied by the OR of two minimum Go versions,// which is the min of the versions.func orVersion(, int) int {if < {return}return}
![]() |
The pages are generated with Golds v0.7.9-preview. (GOOS=linux GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds. |