Go语言 如何访问结构体的Slice of Pointers字段中的嵌入结构体

cwdobuhd  于 2023-05-20  发布在  Go
关注(0)|答案(1)|浏览(152)

我想添加一个功能,当数据为[]*struct时,使用第一个元素。

func getEncFields(t reflect.Type, list map[string]int) {
    for t.Kind() == reflect.Ptr {
        t = t.Elem()
    }
    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)
        }
    }

在这段代码中,我需要在数据为[]*Struct时添加功能。下面是要在此函数中传递的结构类型。

type Customer struct {
    Name     string    `json:"name" bson:"name"`
    Acnumber int64     `json:"acnumber" bson:"acnumber,encr"`
    Number   int64     `json:"number" bson:"number,encr"`
    Address  []*Address `json:"address" bson:"address"`
}
type Address struct {
    Mail string `json:"mail" bson:"mail,encr"`
}

谢谢你的支持

myzjeezk

myzjeezk1#

像处理指针一样,深入研究数组、切片和Map。

func getEncFields(t reflect.Type, list map[string]int) {
    for t.Kind() == reflect.Ptr || t.Kind() == reflect.Slice || t.Kind() == reflect.Array || t.Kind() == reflect.Map {
        t = t.Elem()
    }
    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)
        }
    }
}

https://go.dev/play/p/1msFGC89NX-

相关问题