Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pointers 如何将一个reflect.Type转换为它的ptr类型?_Pointers_Go_Reflection_Types - Fatal编程技术网

Pointers 如何将一个reflect.Type转换为它的ptr类型?

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

我有一个reflect.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.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)