Golang의 반사가 느린 이유는 무엇인가요?
Golang의 반사는 API 설계와 관련이 있습니다. 자바에서는 일반적으로 이런 방식으로 리플렉션을 사용합니다.
Field field = clazz.getField("hello"); field.get(obj1); field.get(obj2);
얻은 반사 객체 유형은 java.lang.reflect.Field입니다. 재사용이 가능합니다. 다른 obj가 전달되는 한 이 obj의 해당 필드를 얻을 수 있습니다.
하지만 Golang의 리플렉션은 다음과 같이 설계되지 않았습니다. (추천 학습: jquery 비디오 튜토리얼)
type_ := reflect.TypeOf(obj) field, _ := type_.FieldByName("hello")
여기서 가져온 필드 객체는 Reflect.StructField 유형이지만 해당 객체의 값을 가져올 방법이 없습니다. . 값을 얻으려면 type
type_ := reflect.ValueOf(obj) fieldValue := type_.FieldByName("hello")
대신 객체에 대해 다른 반사 세트를 사용해야 합니다. 여기에서 가져온 fieldValue 유형은 Reflect.Value입니다. 이는 재사용 가능한 반사 객체가 아닌 특정 값입니다. Reflect.Value 구조의 malloc 및 GC도 포함됩니다.
요약
Golang 반영이 느린 이유는 두 가지입니다.
1 여기에는 메모리 할당 및 후속 GC가 포함됩니다.
3. 유형과 같은 for 루프 그런 것.
더 많은 golang 지식을 알고 싶으시면 PHP 중국어 홈페이지의 golang tutorial 칼럼을 주목해주세요.
위 내용은 Golang 반사가 느린 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!