我有一个结构,并且尝试遍历所有字段以确定该字段是否为地图(或指向地图的指针)。我能够比较字段种类以反映非指针字段的Map.Map,但是我很难对指针字段做同样的事情。如果该字段具有值,则可以使用Elem()确定指针字段的类型,但是如果该字段为nil,则该方法将不起作用,并且我会得到“无效”的信息。关于如何做到这一点的任何想法?操场在这里。
package main
import (
"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())
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句