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
# 遍历
# 字段名
# 需用
# 首字母
# 是一个
# 只在
# 再用
# 时才
# 先用
相关文章:
广州顶尖建站服务:企业官网建设与SEO优化一体化方案
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?
如何做静态网页,sublimetext3.0制作静态网页?
如何通过虚拟主机快速搭建个人网站?
建站之星CMS建站配置指南:模板选择与SEO优化技巧
建站之星在线客服如何快速接入解答?
如何在Ubuntu系统下快速搭建WordPress个人网站?
实现虚拟支付需哪些建站技术支撑?
如何通过山东自助建站平台快速注册域名?
如何在IIS中新建站点并配置端口与IP地址?
,想在网上投简历,哪几个网站比较好?
网站设计制作企业有哪些,抖音官网主页怎么设置?
宝塔新建站点报错如何解决?
制作网站哪家好,cc、.co、.cm哪个域名更适合做网站?
如何通过西部建站助手安装IIS服务器?
小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建
C++时间戳转换成日期时间的步骤和示例代码
免费视频制作网站,更新又快又好的免费电影网站?
清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?
高端云建站费用究竟需要多少预算?
c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗
香港服务器网站卡顿?如何解决网络延迟与负载问题?
沈阳制作网站公司排名,沈阳装饰协会官方网站?
建站之星安装步骤有哪些常见问题?
济南网站建设制作公司,室内设计网站一般都有哪些功能?
如何用5美元大硬盘VPS安全高效搭建个人网站?
免费ppt制作网站,有没有值得推荐的免费PPT网站?
如何构建满足综合性能需求的优质建站方案?
建站主机功能解析:服务器选择与快速搭建指南
如何在七牛云存储上搭建网站并设置自定义域名?
重庆市网站制作公司,重庆招聘网站哪个好?
建站之星免费模板:自助建站系统与智能响应式一键生成
如何访问已购建站主机并解决登录问题?
c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】
广州美橙建站如何快速搭建多端合一网站?
小型网站建站如何选择虚拟主机?
实例解析angularjs的filter过滤器
无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?
网站制作壁纸教程视频,电脑壁纸网站?
如何快速打造个性化非模板自助建站?
安徽网站建设与外贸建站服务专业定制方案
c# 在ASP.NET Core中管理和取消后台任务
股票网站制作软件,网上股票怎么开户?
淘宝制作网站有哪些,淘宝网官网主页?
如何选择网络建站服务器?高效建站必看指南
成都网站制作报价公司,成都工业用气开户费用?
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
如何通过虚拟机搭建网站?详细步骤解析
头像制作网站在线制作软件,dw网页背景图像怎么设置?
*请认真填写需求信息,我们会在24小时内与您取得联系。