首頁  >  文章  >  後端開發  >  Golang反射為什麼慢

Golang反射為什麼慢

angryTom
angryTom原創
2020-03-17 11:50:203627瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn