Golang反射為什麼慢

angryTom
發布: 2020-03-17 11:50:20
原創
3533 人瀏覽過

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反射為什麼慢的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!