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

Tak*_*ato 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
}
Run Code Online (Sandbox Code Playgroud)

ReturnType反射包中不存在方法.我的问题是,我可以在不使用的情况下实现这样的功能cgo.

Lin*_*ope 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
}
Run Code Online (Sandbox Code Playgroud)

如果您确定您的功能只有一个返回值,您可以随时使用Out(0),标准免责声明,确保您的输入正确适用.