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