From 636b11c77f2c85fc222f184500b1bbd30348a512 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 12 Sep 2024 11:50:49 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=A7=A3=E6=9E=90=E5=B7=A5=E5=85=B7Numb?= =?UTF-8?q?er/Boolean=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/framework/utils/parse/parse.go | 45 +++++++++++++++++------------- 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/src/framework/utils/parse/parse.go b/src/framework/utils/parse/parse.go index 67fb8317..a51e313f 100644 --- a/src/framework/utils/parse/parse.go +++ b/src/framework/utils/parse/parse.go @@ -17,46 +17,53 @@ import ( ) // Number 解析数值型 -func Number(str any) int64 { - switch str := str.(type) { +func Number(value any) int64 { + switch v := value.(type) { case string: - if str == "" { + if v == "" { return 0 } - num, err := strconv.ParseInt(str, 10, 64) + num, err := strconv.ParseInt(v, 10, 64) if err != nil { return 0 } return num - case int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64: - return reflect.ValueOf(str).Int() + case int, int8, int16, int32, int64: + return reflect.ValueOf(v).Int() + case uint, uint8, uint16, uint32, uint64: + return int64(reflect.ValueOf(v).Uint()) case float32, float64: - return int64(reflect.ValueOf(str).Float()) + return int64(reflect.ValueOf(v).Float()) + case bool: + if v { + return 1 + } + return 0 default: return 0 } } // Boolean 解析布尔型 -func Boolean(str any) bool { - switch str := str.(type) { +func Boolean(value any) bool { + switch v := value.(type) { case string: - if str == "" || str == "false" || str == "0" { + b, err := strconv.ParseBool(v) + if err != nil { return false } - // 尝试将字符串解析为数字 - if num, err := strconv.ParseFloat(str, 64); err == nil { - return num != 0 - } - return true - case int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64: - num := reflect.ValueOf(str).Int() + return b + case int, int8, int16, int32, int64: + num := reflect.ValueOf(v).Int() + return num != 0 + case uint, uint8, uint16, uint32, uint64: + num := int64(reflect.ValueOf(v).Uint()) return num != 0 case float32, float64: - num := reflect.ValueOf(str).Float() + num := reflect.ValueOf(v).Float() return num != 0 case bool: - return str + return v default: return false }