Skip to content

Commit 5a1548b

Browse files
committed
完善基本类型及对应数组类型;解决数组类型值最终返回 JSON 是空对象
1 parent c1a3d80 commit 5a1548b

File tree

1 file changed

+158
-7
lines changed

1 file changed

+158
-7
lines changed

unitauto/method_util.go

Lines changed: 158 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1382,12 +1382,45 @@ func getInvokeResult(typ reflect.Value, returnType reflect.Type, methodName stri
13821382
vs[i] = val.Convert(returnType)
13831383
continue
13841384
}
1385+
if val.CanInterface() {
1386+
vs[i] = val.Interface()
1387+
continue
1388+
}
13851389

1390+
//k := val.Kind()
1391+
//switch k {
1392+
//case reflect.Bool:
1393+
// vs[i] = val.Bool() // bool(p) // *(*bool)(p)
1394+
//case reflect.Uint:
1395+
// vs[i] = uint(val.Pointer())
1396+
//case reflect.Uint8:
1397+
// vs[i] = uint8(val.Pointer())
1398+
//case reflect.Uint16:
1399+
// vs[i] = uint16(val.Pointer())
1400+
//case reflect.Uint32:
1401+
// vs[i] = uint32(val.Pointer())
1402+
//case reflect.Uint64:
1403+
// vs[i] = uint64(val.Pointer())
1404+
//case reflect.Uintptr:
1405+
// vs[i] = val.Pointer()
1406+
//case reflect.Int:
1407+
// vs[i] = int(val.Pointer())
1408+
//case reflect.Int8:
1409+
// vs[i] = int8(val.Pointer())
1410+
//case reflect.Int16:
1411+
// vs[i] = int16(val.Pointer())
1412+
//case reflect.Int32:
1413+
// vs[i] = int32(val.Pointer())
1414+
//case reflect.Int64:
1415+
// vs[i] = int64(val.Pointer())
1416+
//case reflect.String:
1417+
// vs[i] = val.String()
1418+
//default:
13861419
var vt = val.Type()
1387-
if val.IsNil() {
1388-
vs[i] = nil
1389-
} else if val.CanInt() {
1420+
if val.CanInt() {
13901421
vs[i] = val.Int()
1422+
} else if val.CanUint() {
1423+
vs[i] = val.Uint()
13911424
} else if val.CanFloat() {
13921425
vs[i] = val.Float()
13931426
} else if vt == TYPE_BOOL {
@@ -1403,9 +1436,15 @@ func getInvokeResult(typ reflect.Value, returnType reflect.Type, methodName stri
14031436
//}
14041437
} else if val.CanConvert(vt) {
14051438
vs[i] = val.Convert(vt)
1439+
} else if val.IsZero() {
1440+
vs[i] = reflect.Zero(vt) // nil
1441+
} else if val.CanInterface() && val.IsNil() {
1442+
vs[i] = nil
14061443
} else {
14071444
vs[i] = reflect.Indirect(val)
14081445
}
1446+
//}
1447+
14091448
}
14101449

14111450
if vl == 1 {
@@ -2338,9 +2377,17 @@ var TYPE_METHOD = reflect.TypeOf(reflect.Method{})
23382377
var TYPE_ANY = reflect.TypeOf((any)(nil))
23392378
var TYPE_INTERFACE = TYPE_ANY
23402379
var TYPE_BOOL = reflect.TypeOf(false)
2380+
var TYPE_BYTE = reflect.TypeOf(byte(0))
23412381
var TYPE_INT = reflect.TypeOf(int(0))
2382+
var TYPE_INT8 = reflect.TypeOf(int8(0))
2383+
var TYPE_INT16 = reflect.TypeOf(int16(0))
23422384
var TYPE_INT32 = reflect.TypeOf(int32(0))
23432385
var TYPE_INT64 = reflect.TypeOf(int64(0))
2386+
var TYPE_UINT = reflect.TypeOf(uint(0))
2387+
var TYPE_UINT8 = reflect.TypeOf(uint8(0))
2388+
var TYPE_UINT16 = reflect.TypeOf(uint16(0))
2389+
var TYPE_UINT32 = reflect.TypeOf(uint32(0))
2390+
var TYPE_UINT64 = reflect.TypeOf(uint64(0))
23442391
var TYPE_FLOAT32 = reflect.TypeOf(float32(0.0))
23452392
var TYPE_FLOAT64 = reflect.TypeOf(float64(0.0))
23462393
var TYPE_STRING = reflect.TypeOf("")
@@ -2352,9 +2399,17 @@ var TYPE_MAP_STRING_INTERFACE = reflect.TypeOf(map[string]interface{}{})
23522399
var TYPE_ARR_ANY = reflect.TypeOf([]any{})
23532400
var TYPE_ARR_INTERFACE = reflect.TypeOf([]interface{}{})
23542401
var TYPE_ARR_BOOL = reflect.TypeOf([]bool{})
2402+
var TYPE_ARR_BYTE = reflect.TypeOf([]byte{})
23552403
var TYPE_ARR_INT = reflect.TypeOf([]int{})
2404+
var TYPE_ARR_INT8 = reflect.TypeOf([]int8{})
2405+
var TYPE_ARR_INT16 = reflect.TypeOf([]int16{})
23562406
var TYPE_ARR_INT32 = reflect.TypeOf([]int32{})
23572407
var TYPE_ARR_INT64 = reflect.TypeOf([]int64{})
2408+
var TYPE_ARR_UINT = reflect.TypeOf([]uint{})
2409+
var TYPE_ARR_UINT8 = reflect.TypeOf([]uint8{})
2410+
var TYPE_ARR_UINT16 = reflect.TypeOf([]uint16{})
2411+
var TYPE_ARR_UINT32 = reflect.TypeOf([]uint32{})
2412+
var TYPE_ARR_UINT64 = reflect.TypeOf([]uint64{})
23582413
var TYPE_ARR_FLOAT32 = reflect.TypeOf([]float32{})
23592414
var TYPE_ARR_FLOAT64 = reflect.TypeOf([]float64{})
23602415
var TYPE_ARR_STRING = reflect.TypeOf([]string{})
@@ -2440,12 +2495,28 @@ func cast(obj any, typ reflect.Type) (any, error) {
24402495
// return false
24412496
//}
24422497
return obj.(bool), nil
2498+
case TYPE_BYTE:
2499+
return byte(obj.(float64)), nil
24432500
case TYPE_INT:
24442501
return int(obj.(float64)), nil
2502+
case TYPE_INT8:
2503+
return int8(obj.(float64)), nil
2504+
case TYPE_INT16:
2505+
return int16(obj.(float64)), nil
24452506
case TYPE_INT32:
24462507
return int32(obj.(float64)), nil
24472508
case TYPE_INT64:
24482509
return int64(obj.(float64)), nil
2510+
case TYPE_UINT:
2511+
return uint(obj.(float64)), nil
2512+
case TYPE_UINT8:
2513+
return uint8(obj.(float64)), nil
2514+
case TYPE_UINT16:
2515+
return uint16(obj.(float64)), nil
2516+
case TYPE_UINT32:
2517+
return uint32(obj.(float64)), nil
2518+
case TYPE_UINT64:
2519+
return uint64(obj.(float64)), nil
24492520
case TYPE_FLOAT32:
24502521
return float32(obj.(float64)), nil
24512522
case TYPE_FLOAT64:
@@ -2472,6 +2543,16 @@ func cast(obj any, typ reflect.Type) (any, error) {
24722543
}
24732544
}
24742545
return a, nil
2546+
case TYPE_ARR_BYTE:
2547+
var a = make([]byte, al)
2548+
for i, v := range obj.([]any) {
2549+
if v2, err := cast(v, TYPE_BYTE); err != nil {
2550+
return nil, err
2551+
} else {
2552+
a[i] = v2.(byte)
2553+
}
2554+
}
2555+
return a, nil
24752556
case TYPE_ARR_INT:
24762557
var a = make([]int, al)
24772558
for i, v := range obj.([]any) {
@@ -2482,10 +2563,30 @@ func cast(obj any, typ reflect.Type) (any, error) {
24822563
}
24832564
}
24842565
return a, nil
2566+
case TYPE_ARR_INT8:
2567+
var a = make([]int8, al)
2568+
for i, v := range obj.([]any) {
2569+
if v2, err := cast(v, TYPE_INT8); err != nil {
2570+
return nil, err
2571+
} else {
2572+
a[i] = v2.(int8)
2573+
}
2574+
}
2575+
return a, nil
2576+
case TYPE_ARR_INT16:
2577+
var a = make([]int16, al)
2578+
for i, v := range obj.([]any) {
2579+
if v2, err := cast(v, TYPE_INT16); err != nil {
2580+
return nil, err
2581+
} else {
2582+
a[i] = v2.(int16)
2583+
}
2584+
}
2585+
return a, nil
24852586
case TYPE_ARR_INT32:
24862587
var a = make([]int32, al)
24872588
for i, v := range obj.([]any) {
2488-
if v2, err := cast(v, TYPE_INT); err != nil {
2589+
if v2, err := cast(v, TYPE_INT32); err != nil {
24892590
return nil, err
24902591
} else {
24912592
a[i] = v2.(int32)
@@ -2495,17 +2596,67 @@ func cast(obj any, typ reflect.Type) (any, error) {
24952596
case TYPE_ARR_INT64:
24962597
var a = make([]int64, al)
24972598
for i, v := range obj.([]any) {
2498-
if v2, err := cast(v, TYPE_INT); err != nil {
2599+
if v2, err := cast(v, TYPE_INT64); err != nil {
24992600
return nil, err
25002601
} else {
25012602
a[i] = v2.(int64)
25022603
}
25032604
}
25042605
return a, nil
2606+
case TYPE_ARR_UINT:
2607+
var a = make([]uint, al)
2608+
for i, v := range obj.([]any) {
2609+
if v2, err := cast(v, TYPE_UINT); err != nil {
2610+
return nil, err
2611+
} else {
2612+
a[i] = v2.(uint)
2613+
}
2614+
}
2615+
return a, nil
2616+
case TYPE_ARR_UINT8:
2617+
var a = make([]uint8, al)
2618+
for i, v := range obj.([]any) {
2619+
if v2, err := cast(v, TYPE_UINT8); err != nil {
2620+
return nil, err
2621+
} else {
2622+
a[i] = v2.(uint8)
2623+
}
2624+
}
2625+
return a, nil
2626+
case TYPE_ARR_UINT16:
2627+
var a = make([]uint16, al)
2628+
for i, v := range obj.([]any) {
2629+
if v2, err := cast(v, TYPE_UINT16); err != nil {
2630+
return nil, err
2631+
} else {
2632+
a[i] = v2.(uint16)
2633+
}
2634+
}
2635+
return a, nil
2636+
case TYPE_ARR_UINT32:
2637+
var a = make([]uint32, al)
2638+
for i, v := range obj.([]any) {
2639+
if v2, err := cast(v, TYPE_UINT32); err != nil {
2640+
return nil, err
2641+
} else {
2642+
a[i] = v2.(uint32)
2643+
}
2644+
}
2645+
return a, nil
2646+
case TYPE_ARR_UINT64:
2647+
var a = make([]uint64, al)
2648+
for i, v := range obj.([]any) {
2649+
if v2, err := cast(v, TYPE_UINT64); err != nil {
2650+
return nil, err
2651+
} else {
2652+
a[i] = v2.(uint64)
2653+
}
2654+
}
2655+
return a, nil
25052656
case TYPE_ARR_FLOAT32:
25062657
var a = make([]float32, al)
25072658
for i, v := range obj.([]any) {
2508-
if v2, err := cast(v, TYPE_INT); err != nil {
2659+
if v2, err := cast(v, TYPE_FLOAT32); err != nil {
25092660
return nil, err
25102661
} else {
25112662
a[i] = v2.(float32)
@@ -2515,7 +2666,7 @@ func cast(obj any, typ reflect.Type) (any, error) {
25152666
case TYPE_ARR_FLOAT64:
25162667
var a = make([]float64, al)
25172668
for i, v := range obj.([]any) {
2518-
if v2, err := cast(v, TYPE_INT); err != nil {
2669+
if v2, err := cast(v, TYPE_FLOAT64); err != nil {
25192670
return nil, err
25202671
} else {
25212672
a[i] = v2.(float64)

0 commit comments

Comments
 (0)