慢接口

This commit is contained in:
xiangheng
2024-11-07 14:26:04 +08:00
parent 4d75034c22
commit 962e93c73e
19 changed files with 1171 additions and 53 deletions

View File

@@ -4,6 +4,7 @@ import (
"database/sql/driver"
"encoding/json"
"strconv"
"x_admin/util/convert"
)
// Float类型别名支持前端传递nullfloat64, string类型
@@ -13,35 +14,14 @@ type NullFloat struct {
Valid bool
}
// func EncodeFloat(value any) any {
// switch v := value.(type) {
// case map[string]any:
// if v["Float"] != nil {
// val := v["Float"]
// switch f := val.(type) {
// case *float32:
// return float64(*f)
// case *float64:
// return *f
// case *int:
// return float64(*f)
// case *int64:
// return float64(*f)
// case *string:
// return *f
// default:
// return nil
// }
// }
// }
// return nil
// }
func DecodeFloat(value any) (any, error) {
switch v := value.(type) {
case float64:
f := v
return NullFloat{Float: &f, Valid: true}, nil
case float32:
f := float64(v)
return NullFloat{Float: &f, Valid: true}, nil
case int:
f := float64(v)
return NullFloat{Float: &f, Valid: true}, nil
@@ -65,12 +45,42 @@ func DecodeFloat(value any) (any, error) {
// gorm实现Scanner
func (f *NullFloat) Scan(value interface{}) error {
f.Valid = false
if value == nil {
return nil
result, err := convert.ConvertUtil.ToFloat64(value)
if err != nil {
return err
}
v := value.(float64)
f.Float, f.Valid = &v, true
f.Float, f.Valid = &result, true
return nil
// switch v := value.(type) {
// case float64:
// f.Float, f.Valid = &v, true
// case float32:
// // 直接用float64(float32(v)), 会丢失精度
// val, _ := strconv.ParseFloat(fmt.Sprintf("%f", v), 64)
// f.Float, f.Valid = &val, true
// // 匹配所有int
// case uint, uint8, uint16, uint32, uint64, int8, int16, int, int32, int64:
// val := float64(v)
// f.Float, f.Valid = &val, true
// case string:
// if v == "" {
// f.Float, f.Valid = nil, false
// return nil
// }
// val, err := strconv.ParseFloat(v, 64)
// if err != nil {
// f.Float, f.Valid = nil, false
// return err
// }
// f.Float, f.Valid = &val, true
// return err
// case nil:
// f.Float, f.Valid = nil, false
// return nil
// }
// return nil
}
// gorm实现 Valuer