gitee.com/quant1x/engine@v1.8.4/config/range.go (about) 1 package config 2 3 import ( 4 "gitee.com/quant1x/gox/exception" 5 "gitee.com/quant1x/gox/logger" 6 "gitee.com/quant1x/num" 7 "regexp" 8 "strings" 9 _ "unsafe" 10 ) 11 12 // 正则表达式 13 var ( 14 // 值范围正则表达式 15 valueRangePattern = "[~]\\s*" 16 valueRangeRegexp = regexp.MustCompile(valueRangePattern) 17 18 // 数组正则表达式 19 arrayPattern = "[,]\\s*" 20 arrayRegexp = regexp.MustCompile(arrayPattern) 21 ) 22 23 // 错误信息 24 var ( 25 errnoConfig = 0 26 ErrRangeFormat = exception.New(errnoConfig+0, "数值范围格式错误") 27 ) 28 29 type ValueType interface { 30 ~int | ~float64 | ~string 31 } 32 33 func ParseRange[T ValueType](text string) ValueRange[T] { 34 text = strings.TrimSpace(text) 35 arr := valueRangeRegexp.Split(text, -1) 36 if len(arr) != 2 { 37 logger.Fatalf("text=%s, %+v", text, ErrTimeFormat) 38 } 39 var begin, end T 40 begin = num.GenericParse[T](strings.TrimSpace(arr[0])) 41 end = num.GenericParse[T](strings.TrimSpace(arr[1])) 42 if begin > end { 43 begin, end = end, begin 44 } 45 r := ValueRange[T]{ 46 begin: begin, 47 end: end, 48 } 49 return r 50 } 51 52 // ValueRange 数值范围 53 type ValueRange[T ValueType] struct { 54 begin T // 最小值 55 end T // 最大值 56 } 57 58 // In 检查是否包含在范围内 59 func (r ValueRange[T]) In(v T) bool { 60 if v < r.begin || v > r.end { 61 return false 62 } 63 return true 64 }