feat: str转struct
This commit is contained in:
@ -22,7 +22,13 @@ type BaseValuePtrResult[BaseType op_type.BaseType] struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// MapValueResult map类型转换结果
|
// MapValueResult map类型转换结果
|
||||||
type MapValueResult[Key comparable, Value comparable] struct {
|
type MapValueResult[Key comparable, Value any] struct {
|
||||||
Value map[Key]Value `json:"result"` // 转换结果
|
Value map[Key]Value `json:"result"` // 转换结果
|
||||||
Err error `json:"err"` // 错误信息
|
Err error `json:"err"` // 错误信息
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// StructValueResult struct类型转换结果
|
||||||
|
type StructValueResult[Value any] struct {
|
||||||
|
Value Value `json:"result"` // 转换结果
|
||||||
|
Err error `json:"err"` // 错误信息
|
||||||
|
}
|
||||||
|
@ -13,7 +13,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// ToMap 转换为map, 数据类型可比较, 即可作为 map key, 内置 any 类型无法作为key
|
// ToMap 转换为map, 数据类型可比较, 即可作为 map key, 内置 any 类型无法作为key
|
||||||
func ToMap[Key comparable, Value comparable](str string) define.MapValueResult[Key, Value] {
|
func ToMap[Key comparable, Value any](str string) define.MapValueResult[Key, Value] {
|
||||||
var (
|
var (
|
||||||
err error
|
err error
|
||||||
res map[Key]Value
|
res map[Key]Value
|
||||||
@ -29,3 +29,20 @@ func ToMap[Key comparable, Value comparable](str string) define.MapValueResult[K
|
|||||||
Err: nil,
|
Err: nil,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ToStruct 转换为结构体
|
||||||
|
func ToStruct[Value any](str string, receiver Value) define.StructValueResult[Value] {
|
||||||
|
var (
|
||||||
|
err error
|
||||||
|
)
|
||||||
|
if err = serialize.JSON.UnmarshalWithNumberForString(str, receiver); err != nil {
|
||||||
|
return define.StructValueResult[Value]{
|
||||||
|
Value: receiver,
|
||||||
|
Err: err,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return define.StructValueResult[Value]{
|
||||||
|
Value: receiver,
|
||||||
|
Err: nil,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -28,3 +28,23 @@ func TestToMap(t *testing.T) {
|
|||||||
So(res.Value["age"], ShouldEqual, json.Number("18"))
|
So(res.Value["age"], ShouldEqual, json.Number("18"))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestToStruct(t *testing.T) {
|
||||||
|
Convey("struct转换成", t, func() {
|
||||||
|
testData := `{
|
||||||
|
"name": "baicha",
|
||||||
|
"age": 18
|
||||||
|
}`
|
||||||
|
|
||||||
|
type User struct {
|
||||||
|
Name string `json:"name"`
|
||||||
|
Age int `json:"age"`
|
||||||
|
}
|
||||||
|
var u User
|
||||||
|
res := ToStruct(testData, &u)
|
||||||
|
So(res.Err, ShouldBeNil)
|
||||||
|
So(res.Value, ShouldNotBeNil)
|
||||||
|
So(res.Value.Name, ShouldEqual, "baicha")
|
||||||
|
So(res.Value.Age, ShouldEqual, 18)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user