如何访问结构体的指针切片字段内的嵌入结构体
短信预约 -IT技能 免费直播动态提醒
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>
以上就是如何访问结构体的指针切片字段内的嵌入结构体的详细内容,更多请关注编程网其它相关文章!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341