(rv reflect.Value, indent string)
| 402 | } |
| 403 | |
| 404 | func showValue(rv reflect.Value, indent string) { |
| 405 | rt := rv.Type() |
| 406 | if rt.Kind() != rv.Kind() { |
| 407 | panic("type kind is different from value kind") |
| 408 | } |
| 409 | print(indent+"reflect type: ", rt.Kind().String()) |
| 410 | if rv.CanSet() { |
| 411 | print(" settable=true") |
| 412 | } |
| 413 | if rv.CanAddr() { |
| 414 | print(" addrable=true") |
| 415 | } |
| 416 | if !rv.CanInterface() { |
| 417 | print(" caninterface=false") |
| 418 | } |
| 419 | if !rt.Comparable() { |
| 420 | print(" comparable=false") |
| 421 | } |
| 422 | if name := rt.Name(); name != "" { |
| 423 | print(" name=", name) |
| 424 | } |
| 425 | println() |
| 426 | switch rt.Kind() { |
| 427 | case reflect.Bool: |
| 428 | println(indent+" bool:", rv.Bool()) |
| 429 | case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: |
| 430 | println(indent+" int:", rv.Int()) |
| 431 | case reflect.Uint, reflect.Uintptr, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: |
| 432 | println(indent+" uint:", rv.Uint()) |
| 433 | case reflect.Float32, reflect.Float64: |
| 434 | println(indent+" float:", rv.Float()) |
| 435 | case reflect.Complex64, reflect.Complex128: |
| 436 | println(indent+" complex:", rv.Complex()) |
| 437 | case reflect.String: |
| 438 | println(indent+" string:", rv.String(), rv.Len()) |
| 439 | for i := 0; i < rv.Len(); i++ { |
| 440 | showValue(rv.Index(i), indent+" ") |
| 441 | } |
| 442 | case reflect.UnsafePointer: |
| 443 | println(indent+" pointer:", rv.Pointer() != 0) |
| 444 | case reflect.Array: |
| 445 | println(indent+" array:", rt.Len(), rt.Elem().Kind().String(), int(rt.Size())) |
| 446 | for i := 0; i < rv.Len(); i++ { |
| 447 | showValue(rv.Index(i), indent+" ") |
| 448 | } |
| 449 | case reflect.Chan: |
| 450 | println(indent+" chan:", rt.Elem().Kind().String()) |
| 451 | println(indent+" nil:", rv.IsNil()) |
| 452 | case reflect.Func: |
| 453 | println(indent + " func") |
| 454 | println(indent+" nil:", rv.IsNil()) |
| 455 | case reflect.Interface: |
| 456 | println(indent + " interface") |
| 457 | println(indent+" nil:", rv.IsNil()) |
| 458 | println(indent+" NumMethod:", rv.NumMethod()) |
| 459 | if !rv.IsNil() { |
| 460 | showValue(rv.Elem(), indent+" ") |
| 461 | } |
no test coverage detected