Pointers 如何将一个reflect.Type转换为它的ptr类型?
我有一个reflect.Type,我需要调用Pointers 如何将一个reflect.Type转换为它的ptr类型?,pointers,go,reflection,types,Pointers,Go,Reflection,Types,我有一个reflect.Type,我需要调用MethodByName。如果该方法是在类型T上定义的,则查找它没有问题。如果它是在*T上定义的,则此方法将返回无效值。因此,我尝试将T转换为*T,但失败了。以下是我的工作: 首先,我尝试从类型创建一个新值。类型信息似乎在创建后丢失 t := reflect.TypeOf(src) // src is interface{} type mt, exists := t.MethodByName(name) if !exists { el := r
MethodByName
。如果该方法是在类型T
上定义的,则查找它没有问题。如果它是在*T
上定义的,则此方法将返回无效值。因此,我尝试将T
转换为*T
,但失败了。以下是我的工作:
首先,我尝试从类型创建一个新值。类型信息似乎在创建后丢失
t := reflect.TypeOf(src) // src is interface{} type
mt, exists := t.MethodByName(name)
if !exists {
el := reflect.New(t)
t = reflect.TypeOf(el)
mt, exists = t.MethodByName(name)
fmt.Println(t, mt, exists)
}
然后,我尝试直接从src(接口类型)获取类型,但也失败了
t := reflect.TypeOf(src)
mt, exists := t.MethodByName(name)
if !exists {
t = reflect.TypeOf(&src) // *interface{} type, not what I want
mt, exists = t.MethodByName(name)
fmt.Println(t, mt, exists)
}
返回类型为的值。如果您将此传递给,则这将是reflect.Value
的描述符,而不是您的*T
只需从reflect.New()
返回的值调用:
New返回一个reflect.Value,将其作为参数调用TypeOf将返回reflect.Value类型的reflect.Type。reflect.Value有一个方法类型,请尝试该方法。i、 e.
reflect.New(t).Type()
而不是reflect.TypeOf(reflect.New(t))
el := reflect.New(t)
t = el.Type()
mt, exists = t.MethodByName(name)
fmt.Println(t, mt, exists)