使用以下内容:
var nilError = reflect.Zero(reflect.TypeOf((*error)(nil)).Elem())func main() { fmt.Println("Hello, playground") f := func() error { return nil } fn := reflect.MakeFunc(reflect.TypeOf(f), func(args []reflect.Value) []reflect.Value { return []reflect.Value{nilError} }).Interface().(func() error) fmt.Printf("err: %v", fn())}让我们分解一下。第一步是
reflect.Type为
error:
reflect.TypeOf((*error)(nil)).Elem()。更简单的方法
reflect.TypeOf((error)(nil))不起作用,因为参数的具体值为
nil。没有类型,
nil也不是我们想要的类型。解决方法是传递一个指针
error,然后调用
Elem()该类型以获取
relfect.Typefor
error。
第二步是为类型创建一个零值。



