lancet icon indicating copy to clipboard operation
lancet copied to clipboard

v2 版本里面structtomap 存在一个bug

Open supermigo opened this issue 9 months ago • 1 comments

1 在转化的过程会吧deciaml 类型转化成map[] 这是个灾难,

2质疑一定要把所有的成员的类型全部转化成map 么, ?

3 是否把成员的struct 类型用interface 直接返回更安全呢? 特别遇到自定义类型又没有定json tag 的类型 如果第三点是成立的那么func (f *Field) mapValue(value any) any { ``` val := pointer.ExtractPointer(value) v := reflect.ValueOf(val) var ret any

switch v.Kind() {
case reflect.Struct:
        ret = v.Interface()


func main() {
	type TempStruct struct {
		Ip   string                 `json:"ip"`
		Data decimal.Decimal        `json:"data"`
		Temp map[string]interface{} `json:"temp"`
		X    complex128             `json:"x"`
	}
	type BigData struct {
		CCC  string     `json:"CCC"`
		Data TempStruct `json:"data"`
	}
	tempdata := &TempStruct{
		Ip:   "aaa",
		Data: decimal.NewFromInt(10),
		Temp: map[string]interface{}{
			"aaa": "bbb",
		},
		X: complex(1, 2),
	}
	bigdata := BigData{
		CCC:  "123123",
		Data: *tempdata,
	}

	t, _ := convertor2.StructToMap(bigdata)
	fmt.Printf("----->>>>>%+v", t)
	//fmt.Printf("----->>>>>%+v", t["data"].(TempStruct).Temp)
	//fmt.Printf("%+v\n", structs.New(tempdata))
	//fmt.Println(convertor.StructToMap(tempdata))

}

4
测试用例:

supermigo avatar May 25 '24 17:05 supermigo