例如,我想做这样的事情,
package main
import (
"fmt"
"reflect"
)
func main() {
var f func(int) int
v := reflect.ValueOf(f)
fmt.Println(v.ReturnType() == reflect.TypeOf(1)) // => true
}
反射包中不存在 ReturnType
方法。
我的问题是,我可以在不使用cgo
的情况下实现这样的功能。
答案 0 :(得分:6)
而不是使用reflect.ValueOf(f)
尝试reflect.TypeOf(f)
。 Type
类型有两个名为NumOut
和Out(int)
的相关方法。要按顺序获取所有返回值的类型,可以使用以下循环
typ := reflect.TypeOf(f)
for i := 0; i < typ.NumOut(); i++ {
returnType := typ.Out(i)
// do something with returnType
}
如果您确定您的功能只有一个返回值,您可以随时使用Out(0)
获得该功能,这是关于确保输入正确无误的标准免责声明。