我有一个反映。类型和我需要打电话
MethodByName
. 如果方法是在类型上定义的
T
找到它没问题。如果定义在
*T
,此mehtod将返回无效值。所以我试图改变
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)
}