Go中遍历结构体字段需用reflect包,仅支持导出字段:用reflect.TypeOf获取类型,NumField()和Field(i)遍历,field.Name、field.Type、field.Tag分别获取字段名、类型、标签;非导出字段被忽略。
在 Go 中遍历结构体字段并动态获取字段名和类型,需要借助 reflect 包。Go 的结构体本身不支持原生的运行时字段枚举,但通过反射可以安全、可控地读取公开字段(首字母大写的导出字段)的名称、类型、标签等信息。
先用 reflect.TypeOf 获取结构体的类型对象,再调用 .NumField() 和 .Field(i) 遍历每个字段:
field.N
ame:字段名(字符串,如 "Name")field.Type:字段的类型(reflect.Type),可进一步调用 .Name() 或 .Kind()
field.Tag:结构体标签(如 `json:"name"`),可用 Get("json") 提取注意:只能访问**导出字段**(首字母大写),未导出字段会被忽略且无法通过反射读取值(即使能拿到字段描述,field.Type 可访问,但 reflect.Value.Field(i) 会 panic)。
以下是一个典型用法:
package mainimport ( "fmt" "reflect" )
type User struct { Name string
json:"name"Age intjson:"age"Email stringjson:"email,omitempty"id int // 小写,非导出字段,不会出现在遍历中 }func printStructFields(v interface{}) { t := reflect.TypeOf(v) if t.Kind() == reflect.Ptr { t = t.Elem() } if t.Kind() != reflect.Struct { fmt.Println("不是结构体类型") return }
fmt.Printf("结构体 %s 字段列表:\n", t.Name()) for i := 0; i < t.NumField(); i++ { field := t.Field(i) typeName := field.Type.Name() if typeName == "" && field.Type.Kind() == reflect.Ptr { typeName = "*" + field.Type.Elem().Name() } jsonTag := field.Tag.Get("json") fmt.Printf("- %s: %s (JSON: %q)\n", field.Name, field.Type, jsonTag) }}
func main() { u := User{Name: "Alice", Age: 30} printStructFields(u) // 传值或传指针均可(函数内已处理) }
输出类似:
结构体 User 字段列表: - Name: string (JSON: "name") - Age: int (JSON: "age") - Email: string (JSON: "email,omitempty")获取字段值需配合 reflect.Value
仅获取字段名和类型用
reflect.TypeOf即可;若还需读取当前值,需用reflect.ValueOf,并确保值是可寻址的(如传指针或变量):
v := reflect.ValueOf(&u).Elem() 得到可读写的结构体值v.Field(i).Interface() 获取第 i 个字段的实际值(注意类型断言或 panic 风险)v.Field(i).CanInterface() 返回 false,不能安全取值field.Type.Kind() == reflect.Struct
field.Anonymous 为 true,可据此做特殊处理
# js
# json
# go
# golang
# ai
# 中间件
# 字符串
# 结构体
# 递归
# 循环
# 指针
# Struct
# Interface
# 对象
# typeof
# kind
# http
# 遍历
# 字段名
# 需用
# 首字母
# 是一个
# 也会
# 出现在
# 均可
# 不支持
相关文章:
建站之星后台密码如何安全设置与找回?
南平网站制作公司,2025年南平市事业单位报名时间?
教学论文网站制作软件有哪些,写论文用什么软件
?
微信推文制作网站有哪些,怎么做微信推文,急?
如何高效利用200m空间完成建站?
免费公司网站制作软件,如何申请免费主页空间做自己的网站?
香港服务器选型指南:免备案配置与高效建站方案解析
如何在阿里云购买域名并搭建网站?
外汇网站制作流程,如何在工商银行网站上做外汇买卖?
制作网站的基本流程,设计网站的软件是什么?
制作国外网站的软件,国外有哪些比较优质的网站推荐?
如何通过虚拟主机快速完成网站搭建?
昆明网站制作哪家好,昆明公租房申请网上登录入口?
兔展官网 在线制作,怎样制作微信请帖?
如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法
如何在云服务器上快速搭建个人网站?
盘锦网站制作公司,盘锦大洼有多少5G网站?
保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?
怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?
青岛网站建设如何选择本地服务器?
建站之星在线版空间:自助建站+智能模板一键生成方案
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
如何在Ubuntu系统下快速搭建WordPress个人网站?
官网建站费用明细查询_企业建站套餐价格及收费标准指南
沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?
如何快速上传建站程序避免常见错误?
常州自助建站:操作简便模板丰富,企业个人快速搭建网站
h5网站制作工具有哪些,h5页面制作工具有哪些?
建站之星如何修改网站生成路径?
如何在IIS服务器上快速部署高效网站?
建站之星多图banner生成与模板自定义指南
建站主机功能解析:服务器选择与快速搭建指南
网站图片在线制作软件,怎么在图片上做链接?
智能起名网站制作软件有哪些,制作logo的软件?
制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?
如何自定义建站之星网站的导航菜单样式?
如何在Golang中引入测试模块_Golang测试包导入与使用实践
如何基于PHP生成高效IDC网络公司建站源码?
如何快速配置高效服务器建站软件?
,柠檬视频怎样兑换vip?
网站代码制作软件有哪些,如何生成自己网站的代码?
网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
岳西云建站教程与模板下载_一站式快速建站系统操作指南
如何快速搭建自助建站会员专属系统?
如何通过网站建站时间优化SEO与用户体验?
c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗
如何高效搭建专业期货交易平台网站?
建站之星如何快速更换网站模板?
如何基于云服务器快速搭建个人网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。