我正在使用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?
使用以下内容:
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.Type
for
error
。
第二步是为类型创建一个零值。
问题内容: 假设您有一个文本文件,例如: 您希望相应地更新相应的对象: 凡是不同种类的枚举。 我想有一个通用的方法来实例化枚举值。也就是说,在运行时使用反射,而无需事先知道对象的枚举类型。 我会想到这样的事情: 问题是:应该有什么呢?给定其String表示形式,甚至可以实例化未知枚举吗? 问题答案: 之后不应该被调用-它返回实例的类 你可以投,避免一般性的问题,因为你已经知道的是
我正试图为一个使用泛型类型参数进行参数化的类施展一些Guava 魔法,但是当我试图通过< code > class . forname(String)方法实例化它时,却得到一个< code > ClassNotFoundException 。 我得到这个例外: "无法找到
本文向大家介绍PHP 反射(Reflection)使用实例,包括了PHP 反射(Reflection)使用实例的使用技巧和注意事项,需要的朋友参考一下 PHP Reflection是用于获取类、扩展、方法、函数、对象、参数、属性的详细信息。 ReflectionClass类获取类相关信息,如获取属性、方法、文档注释等。 ReflectionExtension 类用于获取扩展相关信息 Reflec
我尝试实例化以下Java代码中定义的内部类: 我得到了这个例外: 我错过了什么?
问题内容: 我有一个带有接口参数的函数: 我如何通过它传递一个零值,使其通过检查? 方法1: 方法二: 由于https://golang.org/doc/faq#nil_error,第二种方法不起作用 游乐场:https : //play.golang.org/p/V0bMSPcCKI 问题答案: 使用以下内容创建: 问题中的第一种方法不起作用,因为表达式返回。nil接口值的具体类型为nil。 诀
我使用反射为我的 pojo 类创建了一个实例,如下所示: 当我打印时,我得到了以下字符串: < code > com . hex gen . ro . request . createrequisitionro @ 95c 7850[trans srlno = 实际上,所有值都设置为null,我希望为类中可用的setter设置值。因为setters名称可以随时更改,所以我计划动态设置值,这样就不会