我有一个结构,我试图遍历所有字段,以确定该字段是否是一个地图(或指向地图的指针).我能够比较字段种类以反映.非指针字段的地图,但是我在为指针字段做同样的事情时遇到了麻烦.如果该字段有值,我可以使用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())
}
}
Run Code Online (Sandbox Code Playgroud)
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())
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2535 次 |
最近记录: |