在某些情况下调用 NumField on Value panic (go)
Calling NumField on Value panics in some cases (go)
我正在使用 reflect.ValueOf(..) 循环遍历结构中的元素。我注意到,如果我在 ValueOf 函数中将结构与指针传递给结构,则调用 NumField 会失败。
v = reflect.ValueOf(user)
v.NumField() // panics
比
v = reflect.ValueOf(*user)
v.NumField() // works
有没有办法在调用 NumField 之前预先查明 v 是否会崩溃?
您必须检查“种类”以确保它是一个结构。
使用reflect.Indirect处理问题中的两种情况:
v := reflect.Indirect(reflect.ValueOf(x))
v.NumField()
NumField 文档说:
It panics if v's Kind is not Struct.
勾选种类避免恐慌:
if v.Kind() == reflect.Struct {
v.NumField()
} else {
// do something else
}
我正在使用 reflect.ValueOf(..) 循环遍历结构中的元素。我注意到,如果我在 ValueOf 函数中将结构与指针传递给结构,则调用 NumField 会失败。
v = reflect.ValueOf(user)
v.NumField() // panics
比
v = reflect.ValueOf(*user)
v.NumField() // works
有没有办法在调用 NumField 之前预先查明 v 是否会崩溃?
您必须检查“种类”以确保它是一个结构。
使用reflect.Indirect处理问题中的两种情况:
v := reflect.Indirect(reflect.ValueOf(x))
v.NumField()
NumField 文档说:
It panics if v's Kind is not Struct.
勾选种类避免恐慌:
if v.Kind() == reflect.Struct {
v.NumField()
} else {
// do something else
}