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
}