>  기사  >  백엔드 개발  >  Golang 반사가 느린 이유는 무엇입니까?

Golang 반사가 느린 이유는 무엇입니까?

angryTom
angryTom원래의
2020-03-17 11:50:203555검색

Golang 반사가 느린 이유는 무엇입니까?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.