Golang反射为什么慢


本文摘自php中文网,作者angryTom,侵删。

Golang反射为什么慢

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

1

2

3

Field field = clazz.getField("hello");

field.get(obj1);

field.get(obj2);

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

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

1

2

type_ := reflect.TypeOf(obj)

field, _ := type_.FieldByName("hello")

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

1

2

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能写人工智能吗

微服务实战go micro v3 系列(二)- helloworld

手撸golang go与微服务 聚合模式之2

golang 协程并发编程

golang elasticsearch7的使用

golang的memcache如何简单实现

教你用golang实现直播和点播功能

使用 goroutine 和 chanel 快速实现并发和排队

golang导出csv乱码解决方法

手撸golang 结构型设计模式 享元模式

更多相关阅读请进入《golang》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...