Golang反射为什么慢

发布时间:2022-05-15 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Golang反射为什么慢脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

Golang反射为什么慢

Golang的反射很慢,这个和它的API设计有关。在 java 里面,我们一般使用反射都是这样来弄的。

Field field = clazz.getField("hello"); 
field.get(obj1); 
field.get(obj2);

这个取得的反射对象类型是 java.lang.reflect.Field。它是可以复用的。只要传入不同的obj,就可以取得这个obj上对应的 field。

但是Golang的反射不是这样设计的:(推荐学习:jquery视频教程)

tyPE_ := reflect.TypeOf(obj) 
field, _ := type_.FieldByName("hello")

这里取出来的 field 对象是 reflect.StructField 类型,但是它没有办法用来取得对应对象上的值。如果要取值,得用另外一套对object,而不是type的反射

type_ := reflect.ValueOf(obj) 
fieldValue := type_.FieldByName("hello")

这里取出来的 fieldValue 类型是 reflect.Value,它是一个具体的值,而不是一个可复用的反射对象了,每次反射都需要malloc这个reflect.Value结构体,并且还涉及到GC。

小结

Golang reflect慢主要有两个原因

1、涉及到内存分配以及后续的GC;

3、reflect实现里面有大量的枚举,也就是for循环,比如类型之类的。

更多golang知识请关注PHP中文网golang教程栏目。

以上就是Golang反射为什么慢的详细内容,更多请关注脚本宝典其它相关文章

脚本宝典总结

以上是脚本宝典为你收集整理的Golang反射为什么慢全部内容,希望文章能够帮你解决Golang反射为什么慢所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。