Go에서 인터페이스의 reflect.Type
을 얻는 더 좋은 방법은 reflect.TypeOf((*someInterface)(nil)).Elem()
입니까?더 좋은 방법은 반영을 얻는 것입니다. Go의 인터페이스 유형
작동하지만 과거를 스크롤 할 때마다 나를 싫어하게 만듭니다.
Go에서 인터페이스의 reflect.Type
을 얻는 더 좋은 방법은 reflect.TypeOf((*someInterface)(nil)).Elem()
입니까?더 좋은 방법은 반영을 얻는 것입니다. Go의 인터페이스 유형
작동하지만 과거를 스크롤 할 때마다 나를 싫어하게 만듭니다.
불행히도, 그렇지 않습니다. 추한 것처럼 보일 수도 있지만 실제로는 reflect.Type
을 얻기 위해 필요한 최소한의 정보 만 표현하고 있습니다. 이들은 일반적으로 프로그램 시작시 계산되고 함수가 값을 필요로 할 때마다 TypeOf
룩업 패널티가 발생하지 않도록 모든 필요한 유형을 가진 var()
블록의 파일 맨 위에 포함됩니다.
이 관용구는 예를 들어, 표준 라이브러리 전반에 걸쳐 사용됩니다
이 자세한 건설에 대한 이유는reflect.TypeOf
이 라이브러리의 일부가 아니라 내장에서, 그리고 따라서해야한다는 사실에서 유래
html/template/content.go: errorType = reflect.TypeOf((*error)(nil)).Elem()
실제로 가치를 취하십시오.
일부 언어에서 유형 이름은 표현식으로 사용할 수있는 식별자입니다. Go에서는 그렇지 않습니다. 유효한 표현식은 in the spec입니다. 형식의 이름을 reflect.Type
으로 사용할 수도있는 경우 reflect.Type
에 메서드가 있으므로 메서드 표현에 모호한 부분이 생깁니다 (실제로는 인터페이스입니다). 또한 언어 스펙을 표준 라이브러리와 결합하여 유연성을 감소시킵니다.