为了账号安全,请及时绑定邮箱和手机立即绑定

在某些情况下调用 NumField on Value panic (go)

在某些情况下调用 NumField on Value panic (go)

Go
白猪掌柜的 2022-11-23 16:01:34

我正在使用 reflect.ValueOf(..) 循环遍历结构中的元素。我注意到,如果我将结构与指针传递给 ValueOf 函数中的结构,则调用 NumField 会失败。


v = reflect.ValueOf(user)

v.NumField() // panics

比。


v = reflect.ValueOf(*user)

v.NumField() // works

在调用 NumField 之前,有没有办法事先查明 v 是否会恐慌?


查看完整描述

2 回答

?
慕勒3428872

TA贡献0条经验 获得超4个赞

使用reflect.Indirect来处理问题中的两种情况:

v := reflect.Indirect(reflect.ValueOf(x))
v.NumField()

NumField文档说:

如果 v 的 Kind 不是 Struct,它会恐慌。

检查种类以避免恐慌:

if v.Kind() == reflect.Struct {
   v.NumField()
} else { 
  // do something else
  }


查看完整回答
反对 回复 2022-11-23
?
慕容森

TA贡献1545条经验 获得超17个赞

您必须检查“种类”以确保它是一个结构。



查看完整回答
反对 回复 2022-11-23

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信