Go中遍历结构体字段需用reflect.ValueOf和reflect.TypeOf获取反射对象,推荐传指针以支持读写;通过NumField()和Field(i)遍历,注意未导出字段不可Interface();需用CanInterface()校验安全性,并按Kind()分支处理类型。
在 Go 中,reflect 包是实现运行时类型检查和结构体字段动态访问的核心工具。要遍历结构体字段并动态获取对象信息,关键在于正确使用 reflect.ValueOf 和 reflect.TypeOf,并注意导出(首字母大写)字段的可见性限制。
必须先将目标变量转为 reflect.Type 和 reflect.Value。注意:传入的必须是具体值或指针;若传非指针值,无法修改字段,且对嵌套结构体的深层访问可能受限。
reflect.TypeOf(v).Kind() == reflect.Struct 确认类型是结构体&obj),便于后续读写字段;若只读,传值也可行reflect.ValueOf(v).Elem() 只在 v 是指针时才需调用,用于获取被指向的值通过 NumField() 获取字段数量,再用 Field(i) 和 FieldByName(name) 访问单个字段。每个字段对应一个 reflect.StructField(类型信息)和 reflect.Value(值信息)。
reflect.Type.Field(i) 返回字段名、类型、tag(如 json:"user_id")等元数据reflect.Value.Field(i) 返回该字段的可寻址值(需确保原始值可寻址,否则 panic)Field(i) 可读元数据,但 Field(i).Interface() 会 panic —— 运行时不可访问调用 .Interface() 前,建议先用 .CanInterface() 或 .CanAddr() 判断是否可安全转换。对基础类型、切片、map、指针等,需按类型分支处理。
v.Kind() 判断底层类型(如 reflect.String, reflect.Int)v.Len() 和 v.Index(i) 或 v.MapKeys() 迭代
调用相同逻辑即可(注意循环引用保护)sf.Tag.Get("json"),其中 sf 是 StructField
以下是一个简洁可靠的遍历函数:
func PrintStructFields(v interface{}) {
val := reflect.ValueOf(v)
if val.Kind() == reflect.Ptr {
val = val.Elem()
}
if val.Kind() != reflect.Struct {
fmt.Println("not a struct")
return
}
typ := val.Type()
for i := 0; i < val.NumField(); i++ {
field := typ.Field(i)
value := val.Field(i)
if !value.CanInterface() {
continue // 跳过不可导出字段的值访问
}
fmt.Printf("Field: %s, Type: %v, Value: %v, JSON tag: %s\n",
field.Name,
field.Type,
value.Interface(),
field.Tag.Get("json"))
}
}
# js
# json
# go
# golang
# 工具
# String
# 结构体
# 递归
# int
# 循环
# 指针
# Struct
# Interface
# 切片
# len
# map
# 对象
# typeof
# kind
# 遍历
# 字段名
# 需用
# 首字母
# 是一个
# 只在
# 再用
# 时才
# 先用
相关文章:
建站之星安装步骤有哪些常见问题?
建站之星代理如何获取技术支持?
制作网站哪家好,cc、.co、.cm哪个域名更适合做网站?
昆明网站制作哪家好,昆明公租房申请网上登录入口?
成都响应式网站开发,dw怎么把手机适应页面变成网页?
设计网站制作公司有哪些,制作网页教程?
佛山企业网站制作公司有哪些,沟通100网上服务官网?
合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?
网站制作的方法有哪些,如何将自己制作的网站发布到网上?
如何挑选最适合建站的高性能VPS主机?
天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?
怀化网站制作公司,怀化新生儿上户网上办理流程?
新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?
建站之星如何防范黑客攻击与数据泄露?
广州网站建站公司选择指南:建站流程与SEO优化关键词解析
专业网站建设制作报价,网页设计制作要考什么证?
已有域名如何快速搭建专属网站?
免费网站制作appp,免费制作app哪个平台好?
南平网站制作公司,2025年南平市事业单位报名时间?
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
如何快速选择适合个人网站的云服务器配置?
如何在建站宝盒中设置产品搜索功能?
如何快速查询网址的建站时间与历史轨迹?
建站为何优先选择香港服务器?
建站之星会员如何解锁更多建站功能?
贸易公司网站制作流程,出口贸易网站设计怎么做?
微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?
如何用美橙互联一键搭建多站合一网站?
如何高效利用亚马逊云主机搭建企业网站?
北京网站制作的公司有哪些,北京白云观官方网站?
盐城做公司网站,江苏电子版退休证办理流程?
建站之星图片链接生成指南:自助建站与智能设计教程
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
制作营销网站公司,淘特是干什么用的?
建站之星如何实现PC+手机+微信网站五合一建站?
如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法
建站之星如何快速解决建站难题?
南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
如何在万网ECS上快速搭建专属网站?
微课制作网站有哪些,微课网怎么进?
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?
北京网站制作公司哪家好一点,北京租房网站有哪些?
如何选择建站程序?包含哪些必备功能与类型?
如何构建满足综合性能需求的优质建站方案?
完全自定义免费建站平台:主题模板在线生成一站式服务
Android自定义listview布局实现上拉加载下拉刷新功能
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
建站VPS选购需注意哪些关键参数?
*请认真填写需求信息,我们会在24小时内与您取得联系。