如何转换一个反射.键入到其ptr类型



我有一个反射。Type和我需要调用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.New()返回类型为reflect.Value()的值。如果您将其传递给reflect.TypeOf(),那么它将是reflect.Value的描述符,而不是您的*T

只需根据reflect.New():返回的值调用Value.Type()

el := reflect.New(t)
t = el.Type()
mt, exists = t.MethodByName(name)
fmt.Println(t, mt, exists)

相关内容

  • 没有找到相关文章

最新更新