gpt4 book ai didi

reflection - 在golang中使用reflect打印struct指针字段类型

转载 作者:IT王子 更新时间:2023-10-29 00:36:50 26 4
gpt4 key购买 nike

我有一个结构,我正在尝试遍历所有字段以确定该字段是否为映射(或指向映射的指针)。对于非指针字段,我能够将字段类型与 reflect.Map 进行比较,但我在对指针字段执行相同操作时遇到了麻烦。如果该字段有一个值,我可以使用 Elem() 来确定指针字段类型,但如果该字段为 nil,该方法将不起作用,我会得到“无效”。关于如何实现这一目标的任何想法? Playground在这里。

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())
}
}

最佳答案

使用 types而不是 values :

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())
}

playground example

关于reflection - 在golang中使用reflect打印struct指针字段类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37055400/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com