我有一个结构,我试图遍历所有字段以确定该字段是否是地图(或指向地图的指针)。我可以将字段类型与非指针字段的 reflect.Map 进行比较,但我无法为指针字段做同样的事情。如果该字段有一个值,我可以使用 Elem() 来确定指针字段类型,但如果该字段为 nil,则该方法将不起作用并且我得到“无效”。关于如何做到这一点的任何想法?游乐场在这里。package mainimport ( "fmt" "reflect")type Item struct { itemMap map[string]interface{} itemMapPtr *map[string]interface{}}func main() { item := new(Item) printTypes(*item)}func printTypes(item Item) { itemVal := reflect.ValueOf(item) for i := 0; i < itemVal.NumField(); i++ { fieldVal := itemVal.Field(i) if fieldVal.Kind() == reflect.Ptr { fieldVal = fieldVal.Elem() // This is only helpful if the field is not nil } fmt.Println(fieldVal.Kind()) }}
1 回答
眼眸繁星
TA贡献1873条经验 获得超9个赞
使用类型而不是值:
t := reflect.TypeOf(item)
for i := 0; i < t.NumField(); i++ {
ft := t.Field(i).Type
if ft.Kind() == reflect.Ptr {
ft = ft.Elem()
}
fmt.Println(ft.Kind())
}
- 1 回答
- 0 关注
- 228 浏览
添加回答
举报
0/150
提交
取消
