您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

Golang反射为什么慢

2024/4/4 20:30:20发布22次查看
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知识请关注golang教程栏目。
以上就是golang反射为什么慢的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product