为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

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

}


查看完整回答
反对 回复 2022-01-10
  • 1 回答
  • 0 关注
  • 228 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号