我正在Go中编写高阶函数,并试图找出内部函数f
的返回类型。
作为一个简单的示例,假设我要返回内部函数的返回类型的默认值:
f
返回字符串,则GetDefault(f)
返回""
f
返回[]字节,则GetDefault(f)
返回[]byte{}
func GetDefault(func(interface{})) {
// How would I write this function?
}
是否可以在Go中编写这样的功能,不运行f
?
答案 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()
}