Go语言可通过reflect包递归遍历结构体嵌套字段,仅访问导出字段,累积字段名构建完整路径(如User.Profile.Address.Street),对指针解引用、接口取底层值,跳过不可反射类型,支持基础类型、map、slice等直接取值。
Go 语言没有内置的“深度遍历结构体”语法,但可通过 reflect 包递归获取所有导出字段(首字母大写)及其嵌套值。核心思路是:对每个字段检查其类型,若为结构体则递归处理,否则记录字段路径和值。
为避免丢失嵌套层级信息,需在递归时累积字段名,形成类似 User.Profile.Address.Street 的完整路径。关键点:
只访问导出字段(CanInterface() 为 true 且字段名首字母大写)Elem() 解引用再处理;对接口字段,用 Interface() 获取底层值再反射以下函数接收任意结构体指针,输出每个可访问字段的完整路径及 Go 字面量形式的值:
func PrintStructFields(v interface{}, prefix string) {
rv := reflect.ValueOf(v)
if rv.Kind() == reflect.Ptr {
rv = rv.Elem()
}
if rv.Kind() != reflect.Struct {
return
}
rt := rv.Type()
for i := 0; i < rv.NumField(); i++ {
field := rt.Field(i)
value := rv.Field(i)
// 跳过非导出字段
if !value.CanInterface() {
continue
}
fullPath := prefix + field.Name
if !value.IsValid() {
fmt.Printf("%s = \n", fullPath)
continue
}
// 基础类型或非结构体:直接打印
if value.Kind() != reflect.Struct && value.Kind() != reflect.Ptr {
fmt.Printf("%s = %v\n", fullPath, value.Interface())
continue
}
// 指针:解引用后继续
if value.Kind() == reflect.Ptr && !value.IsNil() {
PrintStructFields(value.Interface(), fullPath+".")
continue
}
// 结构体:递归
if value.Kind() == reflect.Struct {
PrintStructFields(value.Interface(), fullPath+".")
}
}
}
调用 PrintStructFields(&myUser, "") 即可输出带层级的完整字段信息。
反射无法访问私有(小写开头)字段,也无法获取 struct tag 以外的定义元信息。若需支持 JSON 标签映射或忽略空字段,需额外解析 field.Tag.Get("json") 并结合逻辑过滤。另外,循环引用结构体将导致无限递归,生产环境建议加深度限制或已访问地址缓存。
# js
# json
# go
# golang
# go语言
# String
# 结构体
# 递归
# bool
# int
# 循环
# 指针
# 接口
# Struct
# Interface
相关文章:
如何零基础在云服务器搭建WordPress站点?
如何在IIS中配置站点IP、端口及主机头?
沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?
如何通过IIS搭建网站并配置访问权限?
如何选择服务器才能高效搭建专属网站?
招商网站制作流程,网站招商广告语?
建站之星北京办公室:智能建站系统与小程序生成方案解析
定制建站平台哪家好?企业官网搭建与快速建站方案推荐
详解jQuery中基本的动画方法
c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】
如何快速生成可下载的建站源码工具?
如何快速搭建高效简练网站?
ui设计制作网站有哪些,手机UI设计网址吗?
如何在建站宝盒中设置产品搜索功能?
深圳 网站制作,深圳招聘网站哪个比较好一点啊?
网站图片在线制作软件,怎么在图片上做链接?
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
在线制作视频的网站有哪些,电脑如何制作视频短片?
建站DNS解析失败?如何正确配置域名服务器?
建站中国官网:模板定制+SEO优化+建站流程一站式指南
网站制作报价单模板图片,小松挖机官方网站报价?
c# 服务器GC和工作站GC的区别和设置
如何在Tomcat中配置并部署网站项目?
七夕网站制作视频,七夕大促活动怎么报名?
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
如何通过虚拟机搭建网站?详细步骤解析
盘锦网站制作公司,盘锦大洼有多少5G网站?
定制建站模板如何实现SEO优化与智能系统配置?18字教程
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
小型网站制作HTML,*游戏网站怎么搭建?
公司网站制作费用多少,为公司建立一个网站需要哪些费用?
如何用低价快速搭建高质量网站?
太原网站制作公司有哪些,网约车营运证查询官网?
C#怎么使用委托和事件 C# delegate与event编程方法
建站之星体验版:智能建站系统+响应式设计,多端适配快速建站
建站之星如何助力企业快速打造五合一网站?
娃派WAP自助建站:免费模板+移动优化,快速打造专业网站
网站制作说明怎么写,简述网页设计的流程并说明原因?
建站主机是否等同于虚拟主机?
桂林网站制作公司有哪些,桂林马拉松怎么报名?
营销式网站制作方案,销售哪个网站招聘效果最好?
建站主机空间推荐 高性价比配置与快速部署方案解析
建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析
如何在阿里云虚拟服务器快速搭建网站?
招贴海报怎么做,什么是海报招贴?
如何通过VPS搭建网站快速盈利?
如何获取上海专业网站定制建站电话?
岳西云建站教程与模板下载_一站式快速建站系统操作指南
网站建设制作、微信公众号,公明人民医院怎么在网上预约?
上海网站制作网站建设公司,建筑电工证网上查询系统入口?
*请认真填写需求信息,我们会在24小时内与您取得联系。