Ai
1 Star 0 Fork 0

FlyQRCode/mutils

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
NumFuncs.go 3.30 KB
一键复制 编辑 原始数据 按行查看 历史
FlyQRCode 提交于 2025-04-21 17:52 +08:00 . 添加数据验证包
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)
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/zybzb/mutils.git
git@gitee.com:zybzb/mutils.git
zybzb
mutils
mutils
v0.0.7

搜索帮助