我正在使用reflect.MakeFunc编写函数。该函数可以返回错误。成功时,我希望它为错误类型的返回值返回nil。我该如何使用反射?目前我有这个:

package main

import (
    "fmt"
    "reflect"
    "errors"        
)

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{reflect.New(reflect.TypeOf(errors.New("")))}
    }).Interface().(func() error)
    fmt.Printf("err: %v", fn())
}
panic: reflect: function created by MakeFunc using closure returned wrong
type: have **errors.errorString for
error.Elem()reflect.New(reflect.TypeOf(errors.New("")))panic:
reflect: function created by MakeFunc using closure returned wrong type: have
*errors.errorString for error.Elem().Elem()

如何获得代表nil错误的reflect.Value?