如何获得函数的返回类型

时间:2020-07-22 17:40:34

标签: go reflection

我正在Go中编写高阶函数,并试图找出内部函数f的返回类型。

作为一个简单的示例,假设我要返回内部函数的返回类型的默认值:

  • 如果f返回字符串,则GetDefault(f)返回""
  • 如果f返回[]字节,则GetDefault(f)返回[]byte{}
func GetDefault(func(interface{})) {
  // How would I write this function?
}

是否可以在Go中编写这样的功能,不运行f

1 个答案:

答案 0 :(得分:2)

您可以使用反射来获取类型并初始化默认值。

func GetDefault(f interface{}) interface{} {
    ft := reflect.TypeOf(f)
    if ft.Kind() != reflect.Func {
        panic("not a func")
    }

    out0 := ft.Out(0) // type of the 0th output value
    return reflect.New(out0).Elem().Interface()
}

https://play.golang.org/p/BhevFvsut5z