gpt4 book ai didi

go - 如何在 reflect.Call 返回中访问自定义类型?

转载 作者:IT王子 更新时间:2023-10-29 02:00:38 25 4
gpt4 key购买 nike

我知道在 Go 中编写泛型函数不是惯用的,但我想在深入了解 go generate 之前探索我的选择。

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

returns := listMethod.Call([]reflect.Value{reflect.ValueOf(filter)})
fmt.Println(returns)

输出

[<vspk.EnterpriseProfilesList Value> <*bambou.Error Value>]

类型定义:

type EnterpriseProfilesList []*EnterpriseProfile

我想获得对 vspk.EnterpriseProfilesList 的访问权限,但我正在努力实现它。

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

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

我收到了

[0xc0000fc7e0]

最佳答案

Value.Call()返回 []reflect.Value 类型的值。您感兴趣的是该 slice 的第一个值:returns[0]

这当然是类型 reflect.Value .要提取包含在其中的值,请使用 Value.Interface() .

这将是 interface{} 类型。如果您需要具体类型,请使用 type assertion :

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
}

关于go - 如何在 reflect.Call 返回中访问自定义类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56593803/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com