@@ -1382,12 +1382,45 @@ func getInvokeResult(typ reflect.Value, returnType reflect.Type, methodName stri
1382
1382
vs [i ] = val .Convert (returnType )
1383
1383
continue
1384
1384
}
1385
+ if val .CanInterface () {
1386
+ vs [i ] = val .Interface ()
1387
+ continue
1388
+ }
1385
1389
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:
1386
1419
var vt = val .Type ()
1387
- if val .IsNil () {
1388
- vs [i ] = nil
1389
- } else if val .CanInt () {
1420
+ if val .CanInt () {
1390
1421
vs [i ] = val .Int ()
1422
+ } else if val .CanUint () {
1423
+ vs [i ] = val .Uint ()
1391
1424
} else if val .CanFloat () {
1392
1425
vs [i ] = val .Float ()
1393
1426
} else if vt == TYPE_BOOL {
@@ -1403,9 +1436,15 @@ func getInvokeResult(typ reflect.Value, returnType reflect.Type, methodName stri
1403
1436
//}
1404
1437
} else if val .CanConvert (vt ) {
1405
1438
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
1406
1443
} else {
1407
1444
vs [i ] = reflect .Indirect (val )
1408
1445
}
1446
+ //}
1447
+
1409
1448
}
1410
1449
1411
1450
if vl == 1 {
@@ -2338,9 +2377,17 @@ var TYPE_METHOD = reflect.TypeOf(reflect.Method{})
2338
2377
var TYPE_ANY = reflect .TypeOf ((any )(nil ))
2339
2378
var TYPE_INTERFACE = TYPE_ANY
2340
2379
var TYPE_BOOL = reflect .TypeOf (false )
2380
+ var TYPE_BYTE = reflect .TypeOf (byte (0 ))
2341
2381
var TYPE_INT = reflect .TypeOf (int (0 ))
2382
+ var TYPE_INT8 = reflect .TypeOf (int8 (0 ))
2383
+ var TYPE_INT16 = reflect .TypeOf (int16 (0 ))
2342
2384
var TYPE_INT32 = reflect .TypeOf (int32 (0 ))
2343
2385
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 ))
2344
2391
var TYPE_FLOAT32 = reflect .TypeOf (float32 (0.0 ))
2345
2392
var TYPE_FLOAT64 = reflect .TypeOf (float64 (0.0 ))
2346
2393
var TYPE_STRING = reflect .TypeOf ("" )
@@ -2352,9 +2399,17 @@ var TYPE_MAP_STRING_INTERFACE = reflect.TypeOf(map[string]interface{}{})
2352
2399
var TYPE_ARR_ANY = reflect .TypeOf ([]any {})
2353
2400
var TYPE_ARR_INTERFACE = reflect .TypeOf ([]interface {}{})
2354
2401
var TYPE_ARR_BOOL = reflect .TypeOf ([]bool {})
2402
+ var TYPE_ARR_BYTE = reflect .TypeOf ([]byte {})
2355
2403
var TYPE_ARR_INT = reflect .TypeOf ([]int {})
2404
+ var TYPE_ARR_INT8 = reflect .TypeOf ([]int8 {})
2405
+ var TYPE_ARR_INT16 = reflect .TypeOf ([]int16 {})
2356
2406
var TYPE_ARR_INT32 = reflect .TypeOf ([]int32 {})
2357
2407
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 {})
2358
2413
var TYPE_ARR_FLOAT32 = reflect .TypeOf ([]float32 {})
2359
2414
var TYPE_ARR_FLOAT64 = reflect .TypeOf ([]float64 {})
2360
2415
var TYPE_ARR_STRING = reflect .TypeOf ([]string {})
@@ -2440,12 +2495,28 @@ func cast(obj any, typ reflect.Type) (any, error) {
2440
2495
// return false
2441
2496
//}
2442
2497
return obj .(bool ), nil
2498
+ case TYPE_BYTE :
2499
+ return byte (obj .(float64 )), nil
2443
2500
case TYPE_INT :
2444
2501
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
2445
2506
case TYPE_INT32 :
2446
2507
return int32 (obj .(float64 )), nil
2447
2508
case TYPE_INT64 :
2448
2509
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
2449
2520
case TYPE_FLOAT32 :
2450
2521
return float32 (obj .(float64 )), nil
2451
2522
case TYPE_FLOAT64 :
@@ -2472,6 +2543,16 @@ func cast(obj any, typ reflect.Type) (any, error) {
2472
2543
}
2473
2544
}
2474
2545
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
2475
2556
case TYPE_ARR_INT :
2476
2557
var a = make ([]int , al )
2477
2558
for i , v := range obj .([]any ) {
@@ -2482,10 +2563,30 @@ func cast(obj any, typ reflect.Type) (any, error) {
2482
2563
}
2483
2564
}
2484
2565
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
2485
2586
case TYPE_ARR_INT32 :
2486
2587
var a = make ([]int32 , al )
2487
2588
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 {
2489
2590
return nil , err
2490
2591
} else {
2491
2592
a [i ] = v2 .(int32 )
@@ -2495,17 +2596,67 @@ func cast(obj any, typ reflect.Type) (any, error) {
2495
2596
case TYPE_ARR_INT64 :
2496
2597
var a = make ([]int64 , al )
2497
2598
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 {
2499
2600
return nil , err
2500
2601
} else {
2501
2602
a [i ] = v2 .(int64 )
2502
2603
}
2503
2604
}
2504
2605
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
2505
2656
case TYPE_ARR_FLOAT32 :
2506
2657
var a = make ([]float32 , al )
2507
2658
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 {
2509
2660
return nil , err
2510
2661
} else {
2511
2662
a [i ] = v2 .(float32 )
@@ -2515,7 +2666,7 @@ func cast(obj any, typ reflect.Type) (any, error) {
2515
2666
case TYPE_ARR_FLOAT64 :
2516
2667
var a = make ([]float64 , al )
2517
2668
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 {
2519
2670
return nil , err
2520
2671
} else {
2521
2672
a [i ] = v2 .(float64 )
0 commit comments