github.com/neilgarb/delve@v1.9.2-nobreaks/pkg/goversion/compat.go (about) 1 package goversion 2 3 import ( 4 "fmt" 5 6 "github.com/go-delve/delve/pkg/logflags" 7 ) 8 9 var ( 10 MinSupportedVersionOfGoMajor = 1 11 MinSupportedVersionOfGoMinor = 16 12 MaxSupportedVersionOfGoMajor = 1 13 MaxSupportedVersionOfGoMinor = 19 14 goTooOldErr = fmt.Sprintf("Go version %%s is too old for this version of Delve (minimum supported version %d.%d, suppress this error with --check-go-version=false)", MinSupportedVersionOfGoMajor, MinSupportedVersionOfGoMinor) 15 goTooOldWarn = fmt.Sprintf("WARNING: undefined behavior - Go version %%s is too old for this version of Delve (minimum supported version %d.%d)", MinSupportedVersionOfGoMajor, MinSupportedVersionOfGoMinor) 16 dlvTooOldErr = fmt.Sprintf("Version of Delve is too old for Go version %%s (maximum supported version %d.%d, suppress this error with --check-go-version=false)", MaxSupportedVersionOfGoMajor, MaxSupportedVersionOfGoMinor) 17 dlvTooOldWarn = fmt.Sprintf("WARNING: undefined behavior - version of Delve is too old for Go version %%s (maximum supported version %d.%d)", MaxSupportedVersionOfGoMajor, MaxSupportedVersionOfGoMinor) 18 ) 19 20 // Compatible checks that the version specified in the producer string is compatible with 21 // this version of delve. 22 func Compatible(producer string, warnonly bool) error { 23 ver := ParseProducer(producer) 24 if ver.IsDevel() { 25 return nil 26 } 27 verstr := fmt.Sprintf("%d.%d.%d", ver.Major, ver.Minor, ver.Rev) 28 if !ver.AfterOrEqual(GoVersion{MinSupportedVersionOfGoMajor, MinSupportedVersionOfGoMinor, -1, 0, 0, ""}) { 29 if warnonly { 30 logflags.WriteError(fmt.Sprintf(goTooOldWarn, verstr)) 31 return nil 32 } 33 return fmt.Errorf(goTooOldErr, verstr) 34 } 35 if ver.AfterOrEqual(GoVersion{MaxSupportedVersionOfGoMajor, MaxSupportedVersionOfGoMinor + 1, -1, 0, 0, ""}) { 36 if warnonly { 37 logflags.WriteError(fmt.Sprintf(dlvTooOldWarn, verstr)) 38 return nil 39 } 40 return fmt.Errorf(dlvTooOldErr, verstr) 41 } 42 return nil 43 }