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 - 实现项目内链路追踪(二)

go1.4 bootstrap 源码安装新版go

stream:我们为何要从python转到go语言?

golang学习笔记——面向对象(接口)

go写的第一个小程序记账系统,来啦

golang官方嵌入文件到可执行程序

ubuntu下安装golang

go 中基于 ip 地址的 http 请求限流

详解golang编译成dll文件

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




打赏

取消

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

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

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

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

评论

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