func Main() {
//ss := (*test)(nil)
ss := new(ReflectUser)
ss = nil //不要赋值
registerType(ss)
}
type ReflectUser struct {
Name string `json:"name_tag"`
Age int `json:"age_tag"`
}
func (ref *ReflectUser) HelloFunc (name string,age int) (string,error) {
println("====HelloWorld===Pam")
println(name)
ref.Name = name
ref.Age = age
return "success",nil
}
var typeRegistry = make(map[string]reflect.Type)
func registerType(elemStr interface{}) {
godump.Dump("====================参数")
godump.Dump(elemStr)
val := reflect.ValueOf(elemStr)
val.Elem().Field(0).SetString("ccc")
val.Elem().Field(1).SetInt(25)
newVal := val.Elem().Field(0).String()
godump.Dump("================valueOf====赋值后")
godump.Dump(newVal)
//
pam := []reflect.Value{}
pam = append(pam,reflect.ValueOf("hello"))
pam = append(pam,reflect.ValueOf(18))
res := val.Method(0).Call(pam)
godump.Dump("=================valueOf===函数后")
godump.Dump(len(res))
godump.Dump(res[0].Interface())
godump.Dump(res[1].Interface())
ptr := reflect.TypeOf(elemStr)//type主要获取Tag等
godump.Dump("============typeOf===实体")
object := ptr.Elem()//取指针指向的元素,可认为对指针变量*操作
godump.Dump(object.Name())
godump.Dump(object.Field(0).Tag.Get("json"))
godump.Dump(object.Field(0).Name)
godump.Dump("===========typeOf===指针")
godump.Dump(ptr.NumMethod())//指针的方法,而不是Elem后的实体
godump.Dump(ptr.Method(0).Name)//指针的方法,而不是Elem后的实体
godump.Dump(ptr.Kind().String())
ins := reflect.New(object).Elem().Interface()
mm := ins.(ReflectUser)
mm.Name = "张三"
t := reflect.TypeOf(elemStr).Elem()
typeRegistry[t.Name()] = t
}