登录
首页 >  Golang >  Go问答

如何获取结构体内的字段名

来源:stackoverflow

时间:2024-02-13 12:54:24 246浏览 收藏

在Golang实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天golang学习网就整理分享《如何获取结构体内的字段名》,聊聊,希望可以帮助到正在努力赚钱的你。

问题内容

我编写了一个程序来检索结构内的字段名称,并且它工作得很好。但是,当涉及到结构体内部的结构体指针时,它不起作用。

https://go.dev/play/p/pHrNRhfZSM4

在检查类型指针结构时,它使用反射包显示“Ptr”,但是当我执行 Elem() 时,它说有什么方法可以解决这个问题吗?

我只想获取 MAP 中带有“encr”标记的每个字段名称。


正确答案


使用类型而不是值:

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

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>