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

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


v = reflect.ValueOf(user)

v.NumField() // panics

比。


v = reflect.ValueOf(*user)

v.NumField() // works

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


白猪掌柜的
浏览 61回答 2
2回答

慕勒3428872

使用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   }

慕容森

您必须检查“种类”以确保它是一个结构。
打开App,查看更多内容
随时随地看视频慕课网APP