卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章34614本站已运行393

如何访问结构体的指针切片字段内的嵌入结构体

如何访问结构体的指针切片字段内的嵌入结构体

php小编草莓为您介绍如何访问结构体的指针切片字段内的嵌入结构体。在Go语言中,我们可以使用指针切片来存储结构体数据,并且在结构体中嵌入其他结构体作为字段。然而,访问嵌入结构体字段需要一些特殊的操作。本文将详细解释如何通过指针切片来访问这些嵌入结构体字段,帮助您更好地理解和应用这一特性。无论您是初学者还是有经验的Go开发者,本文都将为您提供实用的技巧和示例代码,助您轻松掌握这一知识点。

问题内容

我想添加功能以在数据为 []*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"`
}

感谢您的支持

解决方法

像处理指针一样向下钻取数组、切片和映射。

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://www.php.cn/link/b4572f47b7c69e27b8e46646d9579e67 p>

卓越飞翔博客
上一篇: 如果 golang http ResponseWriter 不超过 2kb,为什么会自动添加内容长度
下一篇: 返回列表
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏