go - 如何获得函数的返回类型

标签 go reflection

我正在Go中编写更高阶的函数,并试图找出内部函数f的返回类型。
举一个简单的例子,假设我要返回内部函数的返回类型的默认值:

  • 如果f返回字符串,则GetDefault(f)返回""
  • 如果f返回[] byte,则GetDefault(f)返回[]byte{}

  • func GetDefault(func(interface{})) {
      // How would I write this function?
    }
    
    是否可以在Go,中编写这样的函数而无需运行f

    最佳答案

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

    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

    关于go - 如何获得函数的返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63040159/

    相关文章:

    go - 只为接口(interface)传递方法参数一次?

    c# - 使用动态生成的类型创建通用类的对象

    c# - TypeDescriptor 不从继承的接口(interface)返回成员

    reflection - Windows 8 和 Ninject : Reflection method cannot be used on the current platform

    go - 在 Golang 中以最小宽度 float 到字符串

    go - net包中listen、read和write函数的区别

    arrays - 将Struct数组元素作为参数传递给Go语言中的函数

    go - 结构体在 Go 中包含接口(interface)时的 new 与 {}

    java - 为类中的任何方法运行额外代码

    c# - 有没有办法在运行时构建新类型?