Go语言 获取结构中的字段名称

wn9m85ua  于 2023-05-04  发布在  Go
关注(0)|答案(1)|浏览(208)

我已经写了一个程序来检索结构体中字段的名称,它工作得很好。但是,当它涉及到结构体内部的结构体指针时,它就不起作用了。
https://go.dev/play/p/pHrNRhfZSM4
在检查类型指针结构时,它使用反射包显示“Ptr”,但当我执行Elem()时,它说有什么方法可以解决这个问题吗?
我只是想得到每个字段名称与“encr”标签在Map。

g52tjvyc

g52tjvyc1#

使用类型而不是值:

func getEncFields(t reflect.Type, list map[string]int) {
    // Dereference pointer types.
    for t.Kind() == reflect.Ptr {
        t = t.Elem()
    }
    // Look for tags in struct fields.
    if t.Kind() == reflect.Struct {
        for i := 0; i < t.NumField(); i++ {
            field := t.Field(i)
            tag := field.Tag.Get("bson")
            if containsTag(tag, "encr") {
                list[getFieldName(field, tag)]++
            }
            getEncFields(field.Type, list)
        }
    }
}

以下是如何调用它:

listOfEncTags := make(map[string]int)
getEncFields(reflect.TypeOf(Gadget{}), listOfEncTags)
fmt.Println(listOfEncTags)

https://go.dev/play/p/5JsOil-P-RH

相关问题