在 golang 中使用反射打印结构指针字段类型

我有一个结构,我试图遍历所有字段以确定该字段是否是地图(或指向地图的指针)。我可以将字段类型与非指针字段的 reflect.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())

    }

}


FFIVE
浏览 182回答 1
1回答

眼眸繁星

使用类型而不是值:t := reflect.TypeOf(item)for i := 0; i < t.NumField(); i++ {&nbsp; &nbsp; ft := t.Field(i).Type&nbsp; &nbsp; if ft.Kind() == reflect.Ptr {&nbsp; &nbsp; &nbsp; &nbsp; ft = ft.Elem()&nbsp; &nbsp; }&nbsp; &nbsp; fmt.Println(ft.Kind())}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go