2013-12-09 31 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)得到它,標準免責聲明有關使確保你的輸入是正確的。

相關問題