我正在使用 reflect.ValueOf(..) 循环遍历结构中的元素。我注意到,如果我将结构与指针传递给 ValueOf 函数中的结构,则调用 NumField 会失败。v = reflect.ValueOf(user)v.NumField() // panics比。v = reflect.ValueOf(*user)v.NumField() // works在调用 NumField 之前,有没有办法事先查明 v 是否会恐慌?
2 回答
慕勒3428872
TA贡献1848条经验 获得超6个赞
使用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 }
- 2 回答
- 0 关注
- 81 浏览
添加回答
举报
0/150
提交
取消