-
Notifications
You must be signed in to change notification settings - Fork 0
/
reflecting.go
71 lines (53 loc) · 1.53 KB
/
reflecting.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package main
import (
"fmt"
"github.com/kevgathuku/mailer/Godeps/_workspace/src/github.com/kn9ts/frodo"
// "net/http"
"reflect"
)
/*
------- RESULTS: -------
Value: <*main.Parent Value>
Type: *main.Parent
Kind: ptr
New: <**main.Parent Value>
PtrTo: **main.Parent
Interface: &{{ }}
Indirect: <main.Parent Value>
NumMethod: 10 false
Elem(pointed struct, slice): main.Parent
Pointer ID: 833357997216
"Default" "Delete" "Get" "Head" "MyMethod" "Options" "Patch" "Post" "Put" "_Construct"
*/
type Parent struct {
Frodo.Controller
}
func (p *Parent) MyMethod() {
}
func main2() {
ctrl := &Parent{}
v := reflect.ValueOf(ctrl)
fmt.Println("Value: ", v)
fmt.Println("Type: ", v.Type())
fmt.Println("Kind: ", v.Kind())
fmt.Println("New: ", reflect.New(v.Type()))
fmt.Println("PtrTo: ", reflect.PtrTo(v.Type()))
fmt.Println("Interface: ", v.Interface())
fmt.Println("Indirect: ", reflect.Indirect(v))
fmt.Println("NumMethod: ", v.NumMethod(), v.CanAddr())
if v.Kind().String() == "ptr" {
// It panics if v's Kind is not Interface or Ptr.
fmt.Println("Elem(pointed struct, slice): ", v.Type().Elem())
// me := v.Interface()
// fmt.Printf("%s\n", v.Type())
// It panics if v's Kind is not Chan, Func, Map, Ptr, Slice, or UnsafePointer.
fmt.Println("Pointer ID: ", v.Pointer())
}
for x := 0; x < v.NumMethod(); x++ {
// (Func, Name, Index, PkgPath, Type)98
fmt.Printf("%q\n", v.Type().Method(x).Name)
}
// for x := 0; x < v.NumField(); x++ {
// fmt.Println(v.Field(x))
// }
}