Go语言反射(reflect),Golang反射(reflect)
2年前 (2024-04-27)
反射是指在程序运行期对程序本身进行访问和修改的能力。程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分。在运行程序时,程序无法获取自身的信息。
支持反射的语言可以在程序编译期将变量的反射信息,如字段名称、类型信息、结构体信息等整到可执行文件中,并给程序提供接口访问反射信息,这样就可以在程序运行期获取类型的反射信息,并且有能力修改它们。
Lua、JavaScript 类动态语言,由于其本身的语法特性就可以让代码在运行期访问程序自身的值和类型信息,因此不需要反射系统。
Go 程序的反射系统无法获取到一个可执行文件空间中或者是一个包中的所有类型信息,需要配使用标准库中对应的词法、语法解析器和抽象语法树(AST)对源码进行扫描后获得这些信息。
支持反射的语言可以在程序编译期将变量的反射信息,如字段名称、类型信息、结构体信息等整到可执行文件中,并给程序提供接口访问反射信息,这样就可以在程序运行期获取类型的反射信息,并且有能力修改它们。
Go程序在运行期使用reflect包访问程序的反射信息。
其它语言中的反射
C/C++ 语言没有支持反射功能,只能通过 typeid 提供非常弱化的程序运行时类型信息。Java、C# 等语言都支持完整的反射功能。Lua、JavaScript 类动态语言,由于其本身的语法特性就可以让代码在运行期访问程序自身的值和类型信息,因此不需要反射系统。
Go 程序的反射系统无法获取到一个可执行文件空间中或者是一个包中的所有类型信息,需要配使用标准库中对应的词法、语法解析器和抽象语法树(AST)对源码进行扫描后获得这些信息。
- 本章内容:
- 1. Go语言反射(reflection)简述
- 2. Go语言反射规则浅析
- 3. Go语言反射——性能和灵活性的双刃剑
- 4. Go语言reflect.TypeOf()和reflect.Type(通过反射获取类型信息)
- 5. Go语言reflect.Elem()——通过反射获取指针指向的元素类型
- 6. Go语言通过反射获取结构体的成员类型
- 7. Go语言结构体标签(Struct Tag)
- 8. Go语言reflect.ValueOf()和reflect.Value(通过反射获取值信息)
- 9. Go语言通过反射访问结构体成员的值
- 10. Go语言IsNil()和IsValid()——判断反射值的空和有效性
- 11. Go语言通过反射修改变量的值
- 12. Go语言通过类型信息创建实例
- 13. Go语言通过反射调用函数
- 14. Go语言inject库:依赖注入
- 随机文章
- 京郊马尔代夫原唱(京郊度假胜地,来体验马尔代夫风情!)
- 南宁的小马尔代夫(南宁拥有一处像小马尔代夫的度假胜地)
- 帕劳 马尔代夫 塞班(三大热门海岛旅游地推荐:帕劳、马尔代夫和塞班)
- 信阳马尔代夫度假(信阳推出马尔代夫风情度假新旅游景点)
- 入境马尔代夫检查(马尔代夫入境检查:你需要知道的事情)
- 平南安怀马尔代夫(平南安怀人的梦幻度假胜地:马尔代夫)
- 宜昌马尔代夫在哪(宜昌哪里有类似马尔代夫的度假胜地?)
- 印度 干涉 马尔代夫(印度插手马尔代夫何去何从?)
- 纽约 马尔代夫(纽约人的新天堂:马尔代夫)
- 赤道 马尔代夫(赤道下最美天堂——马尔代夫)
- 昆明马尔代夫航线(昆明至马尔代夫直飞开通!快来抢票!)
- 松原马尔代夫攻略(松原游客必看!详解马尔代夫之旅指南)
- 老陈 马尔代夫(老陈踏上马尔代夫之旅)
- 小马尔代夫金沙湖(小马尔代夫金沙湖:天然湖泊中的珍宝)
- 晚上马尔代夫派对(晚上的马尔代夫:派对狂欢的海滨之夜)
- 艾美 马尔代夫(艾美马尔代夫:奢华的度假胜地)
- 三沙 马尔代夫(马尔代夫与中国三沙共享大海资源)
- 央视 马尔代夫(央视报道:马尔代夫的神秘与美丽)
- 浙江衢州马尔代夫(浙江衢州打造仿马尔代夫主题旅游项目)
- 机票直播马尔代夫(直播马尔代夫机票特惠,立享大优惠!)
- 广州马尔代夫沙屋(广州青年预订马尔代夫沙屋享受慢生活)
- 悬浮之境马尔代夫(探秘悬浮之境,揭开马尔代夫神秘面纱)
- 意大利小马尔代夫(意大利海滨度假胜地被誉为小马尔代夫)
- 赞美马尔代夫的人(美丽的天堂——马尔代夫的美景和文化)
- 海底 马尔代夫(「探秘马尔代夫珊瑚岛屿下的海洋奇观」)
- 移动 马尔代夫(马尔代夫:一个天堂般的度假胜地)
- 海蛇 马尔代夫(马尔代夫:珊瑚礁威胁因海蛇数量增加)
- 重庆马尔代夫跟团(重庆组团游览马尔代夫:畅游海岛美景)
- 慈利的马尔代夫图(慈利湖畔看马尔代夫,湖光美不胜收!)
- 马尔代夫中国酒吧(中国酒吧惊艳马尔代夫:恍如置身故乡)
