反思的呼唤。零值上的 Value.Interface -

call of reflect.Value.Interface on zero Value -

提问人:Alexander Mills 提问时间:11/17/2023 更新时间:11/17/2023 访问量:38

问:

我的代码是这样的:

val := reflect.ValueOf(v)

if val.Kind() == reflect.Ptr {
    val = val.Elem()
    v = val.Interface() // error arises here
}

我收到此错误:

反思的呼唤。Value.Interface on zero 值

有人知道为什么吗?

Go 指针 反射

评论

2赞 JimB 11/17/2023
就像错误说的那样,你调用了一个零值,意思是零。您没有检查是否包含 nil 指针(这是我的猜测,没有最小的可重现示例),或者没有检查是否返回了有效值。Interface()reflect.Valuevval.Elem()
2赞 erik258 11/17/2023
我看到你的顶级语言可能是javascript(尽管你的标签列表确实令人印象深刻。我告诫你不要轻易转向 Go 中的反思。Go 打字非常严格,因此解释性语言体验会促使人们进行反思是本能的。但是 go 打字系统的强大之处在于,您可以准确地知道类型是什么,而无需像解释员一直以来所做的那样进行任何固有的反射。因此,我鼓励你避免反思,直到你真的有正当的需求,而不仅仅是因为“所有这些类型的行为都不像对方”。

答: 暂无答案