是否有可能知道Go中函数的返回值的类型?

时间:2013-12-09 04:01:17

标签: go

例如,我想做这样的事情,

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的情况下实现这样的功能。

1 个答案:

答案 0 :(得分:6)

而不是使用reflect.ValueOf(f)尝试reflect.TypeOf(f)Type类型有两个名为NumOutOut(int)的相关方法。要按顺序获取所有返回值的类型,可以使用以下循环

typ := reflect.TypeOf(f)

for i := 0; i < typ.NumOut(); i++ {
    returnType := typ.Out(i)
    // do something with returnType
}

如果您确定您的功能只有一个返回值,您可以随时使用Out(0)获得该功能,这是关于确保输入正确无误的标准免责声明。