package main
import (
"fmt"
"reflect"
)
type People struct {
Age int
Name string
}
type TestInterface interface {
GetName() string
}
func (p *People) UpdateName(newName string) {
p.Name = newName
}
func (p *People) GetName() string {
return p.Name
}
func main() {
u := People{18, "kuteng"}
fmt.Println(reflect.TypeOf(32).Kind())
fmt.Println(reflect.ValueOf(32).Kind())
fmt.Println(reflect.TypeOf(&u).MethodByName("UpdateName"))
fmt.Println(reflect.ValueOf(&u).MethodByName("UpdateName"))
fmt.Println(reflect.TypeOf(&u).Method(0))
fmt.Println(reflect.ValueOf(&u).Method(0))
fmt.Println(reflect.TypeOf(&u).NumMethod())
fmt.Println(reflect.ValueOf(&u).NumMethod())
fmt.Println(reflect.TypeOf(u).Field(0))
fmt.Println(reflect.ValueOf(u).Field(1))
fmt.Println(reflect.TypeOf(u).FieldByIndex([]int{0}))
fmt.Println(reflect.ValueOf(u).FieldByIndex([]int{0}))
fmt.Println(reflect.TypeOf(u).FieldByName("ID"))
fmt.Println(reflect.ValueOf(u).FieldByName("Name"))
fmt.Println(reflect.TypeOf(u).NumField())
fmt.Println(reflect.ValueOf(u).NumField())
fmt.Println(reflect.TypeOf(u).Align())
fmt.Println(reflect.TypeOf(u).FieldAlign())
fmt.Println(reflect.TypeOf(u).Name())
fmt.Println(reflect.TypeOf(u).PkgPath())
fmt.Println(reflect.TypeOf(u).Size())
fmt.Println(reflect.TypeOf(u).String())
fmt.Println(reflect.TypeOf(u).Implements(reflect.TypeOf((*TestInterface)(nil)).Elem()))
fmt.Println(reflect.TypeOf(u).AssignableTo(reflect.TypeOf(People{})))
fmt.Println(reflect.TypeOf(u).ConvertibleTo(reflect.TypeOf(1)))
fmt.Println(reflect.TypeOf(u).Comparable())
fmt.Println(reflect.TypeOf(&u).Elem())
fmt.Println(reflect.ValueOf(&u).MethodByName("GetName").Call([]reflect.Value{}))
fmt.Println(reflect.ValueOf(&u).CanAddr())
fmt.Println(reflect.ValueOf(&u).CanInterface())
fmt.Println(reflect.ValueOf(&u).CanSet())
a := []int{0, 1}
fmt.Println(reflect.ValueOf(a).Cap())
c := make(chan int)
reflect.ValueOf(c).Close()
fmt.Println(reflect.ValueOf(&u).Elem())
fmt.Println(reflect.ValueOf(a).Index(0))
reflect.ValueOf(a).Index(0).Set(reflect.ValueOf(1))
fmt.Println(a[0])
fmt.Println(reflect.ValueOf(&u).Interface())
fmt.Println(reflect.ValueOf(&u).IsNil())
fmt.Println(reflect.ValueOf(&u).IsValid())
fmt.Println(reflect.ValueOf(a).Len())
m := map[int]string{1: "topgoer.com", 2: "topgoer.cn"}
fmt.Println(reflect.ValueOf(m).MapIndex(reflect.ValueOf(1)))
for index, key := range reflect.ValueOf(m).MapKeys() {
fmt.Println("key=", key)
fmt.Println("idnex=", index)
}
fmt.Println(reflect.ValueOf(1).Type())
}