尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
go 反射 interface{} 判断类型 获取值 设置值 指针才可以设置值
内容包括1. 用interface{}接收值2. 判断interface{}的类型 switch3. 打印interface{}的类型4. 通过字符串对结构体interface{}等进行设置值、获取值处理示例代码package main import ( fmt log reflect ) type Student2 struct { Id1 int json:jsonTag1 db:name2 Name1 string age1 int } func reflectValue(a interface{}) { log.Println( reflect value start ) // 类型判断 switch a.(type) { case float64: log.Println(a type is :, float64) case float32: log.Println(a type is :, float32) default: log.Println(a type is :, default) } // 打印类型 aType : reflect.TypeOf(a) log.Println(a type is:, aType) // 获取值 aValue : reflect.ValueOf(a) log.Println(a value is :, aValue.Float()) // 设置值报错不传指针就没办法设置值 // 报错信息panic: reflect: reflect.Value.SetFloat using unaddressable value // aValue.SetFloat(32.11) // log.Println(a value is :, aValue.Float()) log.Println( reflect value end ) } func reflectPoint(a interface{}) { log.Println( reflect point start ) // 打印类型 aType : reflect.TypeOf(a) log.Println(a type is:, aType) // 判断类型 aKind : aType.Kind() switch aKind { case reflect.Float64: log.Println(a kind is :, float64) case reflect.Float32: log.Println(a kind is :, float32) case reflect.Pointer: log.Println(a kind is :, Pointer) } // 获取参数 aValue : reflect.ValueOf(a) log.Println(a value is :, aValue.Elem().Float()) // 设置参数 aValue.Elem().SetFloat(32.1) log.Println(a value is :, aValue.Elem().Float()) log.Println( reflect point end ) } func reflectStructValue(a interface{}) { log.Println( reflect struct value start ) // 获取类型 aType : reflect.TypeOf(a) log.Println(a type of :, aType) log.Println(a type name :, aType.Name()) // 获取值{100 name1 13} aValue : reflect.ValueOf(a) log.Println(a value of :, aValue) // 根据名称获取字段 // 如果外边传的是value则没法赋值如果传的是$stu地址 则可以复制 name1Filed : aValue.FieldByName(Name1) if name1Filed.Kind() reflect.String name1Filed.CanSet() { name1Filed.SetString(name1111111111) } // 遍历属性 fieldNum : aType.NumField() for i : 0; i fieldNum; i { field : aType.Field(i) value : aValue.Field(i) // 这里得看属性是否大小写如果小写没法子获取他的值 // panic: reflect.Value.Interface: cannot return value obtained from unexported field or method // 获取字段标记field.Tag.Get(json) if value.CanInterface() { log.Println(属性, field.Name, field.Type, value.Interface(), field.Tag.Get(json)) } else { log.Println(属性, field.Name, field.Type) } } // 遍历方法 // func (stu Student2) Say() 可以获取到 // func (stu *Student2) Say() aType.NumMethod就没法获取到了 methodNum : aType.NumMethod() for i : 0; i methodNum; i { method : aType.Method(i) log.Println(方法, method.Name, method.Type) } // 根据名称获取方法并执行 sayMethod : aValue.MethodByName(Say) args : []reflect.Value{reflect.ValueOf(message1111)} sayMethod.Call(args) log.Println( reflect struct value end ) } func reflectStructPoint(a interface{}) { log.Println( reflect struct point start ) // 获取值{100 name1 13} aValue : reflect.ValueOf(a) log.Println(a value of :, aValue.Elem().Interface()) // 根据名称获取字段 // 如果外边传的是value则没法赋值如果传的是$stu地址 则可以复制 name1Filed : aValue.Elem().FieldByName(Name1) if name1Filed.Kind() reflect.String name1Filed.CanSet() { name1Filed.SetString(name1111111111) } log.Println(a value of :, a) log.Println(a value of :, aValue.Elem().Interface()) log.Println( reflect struct point start ) } func (stu Student2) Say(message string) { log.Println(student say:, stu, message) } func main() { log.Println(main ...) var f float64 10 // 传地址可以修改 reflectPoint(f) // 传值就不能修改 reflectValue(f) stu : Student2{100, name1, 13} stu.Say(1111) reflectStructValue(stu) reflectStructPoint(stu) fmt.Println(success ...) }参考https://www.topgoer.com/%E5%B8%B8%E7%94%A8%E6%A0%87%E5%87%86%E5%BA%93/%E5%8F%8D%E5%B0%84.html
RELATED

相关推荐

闲鱼自动化监控系统:3分钟快速部署,实现24小时智能商品抓取

闲鱼自动化监控系统:3分钟快速部署,实现24小时智能商品抓取

闲鱼自动化监控系统:3分钟快速部署,实现24小时智能商品抓取 【免费下载链接】idlefish_xianyu_spider-crawler-sender 闲鱼自动抓取/筛选/发送系统,xianyu spider crawler blablabla 项目地址: https://gitcode.com/gh_mirrors/id/idlefish…

📅 2026/10/22 16:53:20
嵌入式RTOS技术简介:实时操作系统到底是什么

嵌入式RTOS技术简介:实时操作系统到底是什么

一 RTOS核心定义RTOS全称Real-Time Operating System,实时操作系统,是专门面向嵌入式设备、以任务响应确定性为核心设计的操作系统,和我们电脑/手机用的Linux、Windows分时操作系统有本质区别。通用操作系统(Linux/Android&#x…

📅 2026/11/11 10:39:27
任天堂Switch终极自定义固件:Atmosphere 1.7.1完整使用指南 [特殊字符]

任天堂Switch终极自定义固件:Atmosphere 1.7.1完整使用指南 [特殊字符]

任天堂Switch终极自定义固件:Atmosphere 1.7.1完整使用指南 🎮 【免费下载链接】Atmosphere-stable 大气层整合包系统稳定版 项目地址: https://gitcode.com/gh_mirrors/at/Atmosphere-stable Atmosphere 1.7.1是任天堂Switch平台上最强大、最稳定…

📅 2026/9/12 18:01:18
MORE NEWS

更多资讯

📰

工地太忙根本没时间复习考试?这3个电工证练题网站帮你解决【在哪考】难题

工地太忙根本没时间复习考试?这3个电工证练题网站帮你解决【在哪考】难题 工地太忙根本没时间复习考试?特种作业证考试不通过,就等于没了工作机会,特别是电工证这种高需求证书。很多人在赶工期的时候,根本腾不出时间系统复习,更别说找到靠谱的…

📰

电工证理论太难考了?保姆级教程帮你一网打尽

电工证理论太难考了?保姆级教程帮你一网打尽 不知道去哪报名怕被中介坑,这几乎是每个想考电工证的人心中的共同疑问。尤其是对于从事全省房建工程的你,电工证不仅是上岗的门槛,更是职业发展的重要凭证。但是“电工证理论太难考了”这句话,让很多人望而却…

📰

芜湖报考电工证在哪里 电工证全国通用 怎么高效备考?

芜湖报考电工证在哪里 电工证全国通用 怎么高效备考? 工地太忙根本没时间复习考试,这是很多一线电工朋友的真实写照。尤其像在周口从事水利工程的电工,每天忙于现场作业,根本没有空闲时间系统复习电工证考试内容。但问题是, 电工证全国通用…

📰

没单位怎么审电工证 通过率揭秘实操考试怎么准备

没单位怎么审电工证 通过率揭秘实操考试怎么准备 实操考试心里没底怕挂科?别担心,今天咱们就来聊聊【没单位怎么审电工证】这个事儿,特别是那些没有单位、想自己考电工证的朋友们,看看怎么搞定了。…

📰

西藏考电工证流程详细怎么走 值不值得考看这里

西藏考电工证流程详细怎么走 值不值得考看这里 你是不是正在为找工作发愁?特种作业证成了你进入工地、工厂、电力公司等岗位的“硬门槛”,特别是在西藏这样的高海拔地区,电工证几乎是电力类岗位的标配。但问题来了:**西藏考电工证流程详细怎么走?值不…

📰

电工证年审过期6怎么补救 上岗必备的避坑指南

电工证年审过期6怎么补救 上岗必备的避坑指南 之前考的证在外省能不能转过来?这个问题我遇到太多了,尤其是三门峡这边的劳务班组负责人,经常跑工地,手里拿着各种证书,但一到年审期就手忙脚乱。特别是 电工证年审过期6…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬