gpt4 book ai didi

go - 如何使用 reflect 包访问函数的返回数据?

转载 作者:IT王子 更新时间:2023-10-29 02:24:31 26 4
gpt4 key购买 nike

我有一个 IndexController 类型的函数:

func (this IndexController) ActionIndex() map[string]string {
return map[string]string{"Name": "Hello from the actionIndex()!"}
}

它是这样使用的:

routerInstance := router.Constructor(request)

controllerObject := controllers[routerInstance.GetRequestController(true)]

outputData := reflect.ValueOf(controllerObject).MethodByName(routerInstance.GetRequestAction(true)).Call([]reflect.Value{})

fmt.Println(outputData)

现在例如,如何显示outputDataName元素?我尝试这样打印:

fmt.Println(outputData["Name"])

但是程序会报错退出:

# command-line-arguments
./server.go:28: non-integer array index "Name"

我将不胜感激!

最佳答案

首先,(v Value) Call(…)返回一个 []reflect.Value,因此您需要对其进行索引以获得实际返回值:

outputData := reflect.ValueOf(controllerObject).MethodByName(routerInstance.GetRequestAction(true)).Call([]reflect.Value{})[0]

(注意行尾的[0])

从那里开始,您可能会进行类型切换或接口(interface)转换,如 outputData.(map[string]interface{}) 以获得可以按字符串索引的 map 。

不过,如果您提供整个 server.go 文件,或者将其放在 play.golang.org 上,那将会有所帮助。 .

关于go - 如何使用 reflect 包访问函数的返回数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23180307/

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