代码拉取完成,页面将自动刷新
package valifuncs
import (
"fmt"
"math"
"strconv"
)
type Number interface {
~int | ~int8 | ~int16 | ~int32 | ~int64 |
~uint | ~uint8 | ~uint16 | ~uint32 | ~uint64 | ~uintptr |
~float32 | ~float64
}
// NumMaxValue 返回验证值是否不大于最大值的函数
func NumMaxValue[T Number](maxValue T) func(value T) error {
return func(value T) error {
if value > maxValue {
return fmt.Errorf("值不能大于%v", maxValue)
}
return nil
}
}
// NumMinValue 返回验证值是否不小于最小值的函数
func NumMinValue[T Number](minValue T) func(value T) error {
return func(value T) error {
if value < minValue {
return fmt.Errorf("值不能小于%v", minValue)
}
return nil
}
}
// NumRange 返回验证值是否在[min, max]范围内的函数
func NumRange[T Number](min, max T) func(value T) error {
return func(value T) error {
if value < min {
return fmt.Errorf("值不能小于%v", min)
}
if value > max {
return fmt.Errorf("值不能大于%v", max)
}
return nil
}
}
// NumInList 返回验证值是否在[min, max]范围内的函数
func NumInList[T Number](NumList []T) func(value T) error {
return func(value T) error {
for _, num := range NumList {
if value == num {
return fmt.Errorf("值不能等于%v", value)
}
}
return nil
}
}
// NumPositive 验证值是否为正数
func NumPositive[T Number]() func(value T) error {
return func(value T) error {
if value <= 0 {
return fmt.Errorf("值必须为正数")
}
return nil
}
}
// NumNegative 验证值是否为负数
func NumNegative[T Number]() func(value T) error {
return func(value T) error {
if value >= 0 {
return fmt.Errorf("值必须为负数")
}
return nil
}
}
// NumNonNegative 验证值是否为非负数
func NumNonNegative[T Number]() func(value T) error {
return func(value T) error {
if value < 0 {
return fmt.Errorf("值不能为负数")
}
return nil
}
}
// NumNonPositive 验证值是否为非正数
func NumNonPositive[T Number]() func(value T) error {
return func(value T) error {
if value > 0 {
return fmt.Errorf("值不能为正数")
}
return nil
}
}
// NumMultipleOf 验证值是否为指定数的倍数
func NumMultipleOf[T Number](multiple T) func(value T) error {
return func(value T) error {
if math.Mod(float64(value), float64(multiple)) != 0 {
return fmt.Errorf("值必须是%v的倍数", multiple)
}
return nil
}
}
// NumEqualTo 验证值是否等于指定值
func NumEqualTo[T Number](target T) func(value T) error {
return func(value T) error {
if value != target {
return fmt.Errorf("值必须等于%v", target)
}
return nil
}
}
// NumNotEqualTo 验证值是否不等于指定值
func NumNotEqualTo[T Number](target T) func(value T) error {
return func(value T) error {
if value == target {
return fmt.Errorf("值不能等于%v", target)
}
return nil
}
}
func NumFromStr[T Number](value string) (T, error) {
var zero T
switch any(zero).(type) {
case int, int8, int16, int32, int64:
v, err := strconv.ParseInt(value, 10, 64)
return T(v), err
case uint, uint8, uint16, uint32, uint64, uintptr:
v, err := strconv.ParseUint(value, 10, 64)
return T(v), err
case float32, float64:
v, err := strconv.ParseFloat(value, 64)
return T(v), err
default:
return zero, fmt.Errorf("无法将 %T 转换为数字", value)
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。