用Go反射遍历任意结构体字段需传指针,通过reflect.ValueOf和reflect.TypeOf获取值与类型,递归处理结构体、切片、map等,支持标签解析与缩进打印。
用 Go 语言遍历任意结构体字段并打印,核心是 反射(reflect)。Go 不支持传统意义上的“运行时字段枚举”,但 reflect 包提供了安全、通用的方案,适用于任意嵌套结构体、指针、基础类型、切片、map 等。
必须传入结构体指针(*T),否则 reflect.Value 无法获取导出字段(首字母大写)。使用 reflect.TypeOf 和 reflect.ValueOf 获取类型和值信息,再通过 .NumField() 和 .Field(i) 遍历:
.Elem() 解引用到实际结构体值.Kind() == reflect.Struct).Type().Field(i) 获取字段名、标签;.Field(i) 获取字段值递归是关键。对每个字段值做类型判断,再决定是否深入:
通过 structField.Tag.Get("json") 或自定义 tag(如 "print")控制显示逻辑。配合层级深度参数实现缩进,提升可读性:
indent + " ")json 名(若存在且非 "-"), fallback 到原始字段名以下是一个轻量、健壮的打印函数(已处理空指针、循环引用简化、非导出字段跳过):
func PrintStruct(v interface{}, indent string) {
rv := reflect.ValueOf(v)
if !rv.IsValid() {
fmt.Println(indent + "(invalid)")
return
}
if rv.Kind() == reflect.Ptr {
if rv.IsNil() {
fmt.Println(indent + "")
return
}
fmt.Println(indent + "&{")
PrintStruct(rv.Elem().Interface(), indent+" ")
fmt.Println(indent + "}")
return
}
if rv.Kind() != reflect.Struct {
fmt.Printf("%s%v\n", indent, rv.Interface())
return
}
rt := reflect.TypeOf(v).Elem()
for i := 0; i < rv.NumField(); i++ {
field := rt.Field(i)
value := rv.Field(i)
if !value.CanInterface() { // 非导出字段跳过
continue
}
name := field.Name
if jsonTag := field.Tag.Get("json"); jsonTag != "" && jsonTag != "-" {
if idx := strings.Index(jsonTag, ","); idx > 0 {
name = jsonTag[:idx]
} else {
name = jsonTag
}
}
fmt.Printf("%s%s: ", indent, name)
PrintStruct(value.Interface(), indent+" ")
}
}
# js
# json
# go
# golang
# 格式化输出
# print
# 字符串
# 结构体
# 递归
# 循环
# 指针
# 接口
# Struct
# 空指针
# 切片
# nil
# map
# 对象
# typeof
# kind
# 遍历
# 跳过
# 字段名
# 是一个
# 适用于
# 布尔
# 自定义
# 不支持
# 判断是否
相关文章:
公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?
Bpmn 2.0的XML文件怎么画流程图
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?
如何在Windows环境下新建FTP站点并设置权限?
,柠檬视频怎样兑换vip?
江苏网站制作公司有哪些,江苏书法考级官方网站?
如何配置WinSCP新建站点的密钥验证步骤?
如何在橙子建站上传落地页?操作指南详解
如何通过虚拟机搭建网站?详细步骤解析
魔方云NAT建站如何实现端口转发?
长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?
c# 在高并发场景下,委托和接口调用的性能对比
重庆网站制作公司哪家好,重庆中考招生办官方网站?
Thinkphp 中 distinct 的用法解析
我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?
建站主机系统SEO优化与智能配置核心关键词操作指南
东莞专业制作网站的公司,东莞大学生网的网址是什么?
C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)
制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?
红河网站制作公司,红河事业单位身份证如何上传?
网站制作的步骤包括,正确网址格式怎么写?
建站之星如何快速更换网站模板?
如何选择CMS系统实现快速建站与SEO优化?
简历在线制作网站免费版,如何创建个人简历?
ppt制作免费网站有哪些,ppt模板免费下载网站?
如何制作网站标识牌,动态网站如何制作(教程)?
建站之星免费模板:自助建站系统与智能响应式一键生成
网站制作软件有哪些,制图软件有哪些?
设计网站制作公司有哪些,制作网页教程?
怀化网站制作公司,怀化新生儿上户网上办理流程?
如何快速完成中国万网建站详细流程?
教学论文网站制作软件有哪些,写论文用什么软件
?
广州美橙建站如何快速搭建多端合一网站?
建站之星客服服务时间及联系方式如何?
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
如何快速生成可下载的建站源码工具?
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
建站之星后台密码如何安全设置与找回?
青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?
如何在局域网内绑定自建网站域名?
想学网站制作怎么学,建立一个网站要花费多少?
建站主机类型有哪些?如何正确选型
娃派WAP自助建站:免费模板+移动优化,快速打造专业网站
如何选购建站域名与空间?自助平台全解析
如何通过万网虚拟主机快速搭建网站?
如何访问已购建站主机并解决登录问题?
网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
教学网站制作软件,学习*后期制作的网站有哪些?
*请认真填写需求信息,我们会在24小时内与您取得联系。