2013-12-09 30 views
4

例如,我想要做这样的事情,是否有可能知道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

回答

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)得到它,标准免责声明有关使确保你的输入是正确的。

相关问题