Go 如何在reflect.Call return中访问自定义类型?

Go 如何在reflect.Call return中访问自定义类型?,go,reflection,Go,Reflection,我知道在Go中编写泛型函数并不惯用,但在深入研究Go generate之前,我想探索一下我的选项 我遇到的问题是,Value.Call()返回一个片段,其中我感兴趣的元素是指向自定义结构的指针。好像我找不到一个方法来访问这个 返回:=listMethod.Call([]reflect.Value{reflect.ValueOf(filter)}) fmt.Println(退货) 输出 [<vspk.EnterpriseProfilesList Value> <*bambou.

我知道在Go中编写泛型函数并不惯用,但在深入研究
Go generate
之前,我想探索一下我的选项

我遇到的问题是,
Value.Call()
返回一个片段,其中我感兴趣的元素是指向自定义结构的指针。好像我找不到一个方法来访问这个

返回:=listMethod.Call([]reflect.Value{reflect.ValueOf(filter)})
fmt.Println(退货)
输出

[<vspk.EnterpriseProfilesList Value> <*bambou.Error Value>]
我想访问
vspk.enterpriseeprofileslist
,但我很难做到这一点

如果我尝试像这样检索基础值:

returns := listMethod.Call([]reflect.Value{reflect.ValueOf(filter)})
ret1 := returns[0].Interface()
fmt.Println(ret1)
我收到

[0xc0000fc7e0]
返回类型为
[]的值reflect.value
。您感兴趣的是该切片的第一个值:
返回[0]

这当然是一种类型。要提取包装在其中的值,请使用

这将是
接口{}
类型。如果需要混凝土类型,请使用:

例如:

if list, ok := returns[0].Interface().(spk.EnterpriseProfilesList); ok {
    // here list is of type spk.EnterpriseProfilesList
} else {
    // it was nil or not of type spk.EnterpriseProfilesList
}

谢谢@icza,我能以某种方式使类型断言动态吗?i、 e.如果我只有一个字符串“EnterpriseProfileList”,我可以在类型断言语句中使用它吗?@RomanDodin No,Go是一种静态类型语言。看见和。
returns[0].Interface().(spk.EnterpriseProfilesList)
if list, ok := returns[0].Interface().(spk.EnterpriseProfilesList); ok {
    // here list is of type spk.EnterpriseProfilesList
} else {
    // it was nil or not of type spk.EnterpriseProfilesList
}