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
相关文章:
如何在腾讯云免费申请建站?
SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?
动图在线制作网站有哪些,滑动动图图集怎么做?
婚礼视频制作网站,学习*后期制作的网站有哪些?
网站制作员失业,怎样查看自己网站的注册者?
武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?
如何快速查询网址的建站时间与历史轨迹?
网站制作多少钱一个,建一个论坛网站大约需要多少钱?
如何通过虚拟主机空间快速建站?
如何通过虚拟主机快速搭建个人网站?
重庆网站制作公司哪家好,重庆中考招生办官方网站?
打鱼网站制作软件,波克捕鱼官方号怎么注册?
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
怀化网站制作公司,怀化新生儿上户网上办理流程?
MySQL查询结果复制到新表的方法(更新、插入)
ppt制作免费网站有哪些,ppt模板免费下载网站?
如何通过西部建站助手安装IIS服务器?
建站主机CVM配置优化、SEO策略与性能提升指南
制作网站公司那家好,网络公司是做什么的?
微信小程序 input输入框控件详解及实例(多种示例)
已有域名和空间,如何快速搭建网站?
文字头像制作网站推荐软件,醒图能自动配文字吗?
高性能网站服务器部署指南:稳定运行与安全配置优化方案
香港服务器选型指南:免备案配置与高效建站方案解析
如何破解联通资金短缺导致的基站建设难题?
建站之星×万网:智能建站系统+自助建站平台一键生成
XML的“混合内容”是什么 怎么用DTD或XSD定义
如何登录建站主机?访问步骤全解析
如何在Windows 2008云服务器安全搭建网站?
如何在香港服务器上快速搭建免备案网站?
如何基于PHP生成高效IDC网络公司建站源码?
linux top下的 minerd 木马清除方法
常州企业建站如何选择最佳模板?
如何快速搭建个人网站并优化SEO?
如何在服务器上配置二级域名建站?
建站主机如何选?性能与价格怎样平衡?
如何通过远程VPS快速搭建个人网站?
企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?
建站之星Pro快速搭建教程:模板选择与功能配置指南
javascript基本数据类型及类型检测常用方法小结
存储型VPS适合搭建中小型网站吗?
如何快速搭建高效服务器建站系统?
南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?
营销式网站制作方案,销售哪个网站招聘效果最好?
如何快速搭建虚拟主机网站?新手必看指南
建站三合一如何选?哪家性价比更高?
,石家庄四十八中学官网?
如何快速搭建安全的FTP站点?
php json中文编码为null的解决办法
如何选择服务器才能高效搭建专属网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。