本文摘自php中文网,作者angryTom,侵删。
Golang反射为什么慢
Golang的反射很慢,这个和它的API设计有关。在 java 里面,我们一般使用反射都是这样来弄的。
1 2 3 |
|
这个取得的反射对象类型是 java.lang.reflect.Field。它是可以复用的。只要传入不同的obj,就可以取得这个obj上对应的 field。
但是Golang的反射不是这样设计的:(推荐学习:jquery视频教程)
1 2 |
|
这里取出来的 field 对象是 reflect.StructField 类型,但是它没有办法用来取得对应对象上的值。如果要取值,得用另外一套对object,而不是type的反射
1 2 |
|
这里取出来的 fieldValue 类型是 reflect.Value,它是一个具体的值,而不是一个可复用的反射对象了,每次反射都需要malloc这个reflect.Value结构体,并且还涉及到GC。
小结
Golang reflect慢主要有两个原因
1、涉及到内存分配以及后续的GC;
3、reflect实现里面有大量的枚举,也就是for循环,比如类型之类的。
更多golang知识请关注PHP中文网golang教程栏目。
以上就是Golang反射为什么慢的详细内容,更多文章请关注木庄网络博客!!
相关阅读 >>
微服务实战go micro v3 系列(二)- helloworld
使用 goroutine 和 chanel 快速实现并发和排队
更多相关阅读请进入《golang》频道 >>
Go语言101
一个与时俱进的Go编程知识库。