Я пишу функцию с помощью refle.MakeFunc. Эта функция может вернуть ошибку. Когда это успешно, я хочу, чтобы это возвратило ноль для его возвращаемого значения ошибки. Как я могу сделать это с помощью отражения? В настоящее время у меня есть это:
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()
, и у меня возникла ошибка сегментации.
Как я могу получить отражение. Значение, представляющее нулевую ошибку?