프리미티브 기반 유형에 대한 Reflect.Kind 검색: 자세한 설명
종종 개발자는 Reflect를 결정해야 할 필요성에 직면합니다. 기본 유형을 기반으로 하는 기본 구현이 있는 유형입니다. as:
type ID interface { myid() } type id string func (id) myid() {}
위의 예에서 "id" 유형은 기본 문자열 프리미티브를 사용하여 "ID" 인터페이스를 구현합니다. 문제는 기본 Reflect.String 종류 대신 Reflect.Interface 값을 검색하는 것입니다.
솔루션 공개: 인터페이스에 대한 포인터
일반적인 오해는 통과하는 것입니다. .TypeOf()를 반영할 "id" 유형의 값. 그러나 이로 인해 값이 포함된 문자열 프리미티브가 있는 인터페이스로 암시적으로 다시 패키징됩니다.
이 장애물을 극복하는 열쇠는 인터페이스에 대한 포인터를 활용하는 것입니다. 유형 설명자는 포인터를 전달하여 인터페이스를 래핑하여{} 재패키징을 방지합니다. 그런 다음 Type.Elem()을 사용하여 유형의 인터페이스 특성을 정확하게 반영하는 포인티드 인터페이스의 유형 설명자를 검색할 수 있습니다.
id := ID(id("test")) t := reflect.TypeOf(&id).Elem() fmt.Println(t.Kind()) // Output: interface
이 접근 방식은 유형에 대해 원하는 Reflect.Interface 종류를 효과적으로 나타냅니다. 기본 요소에 뿌리를 두고 있습니다.
추가 통찰력: 인터페이스에 대한 포인터 이점
이 기술은 초기 문제를 해결할 뿐만 아니라 인터페이스에 대한 포인터 사용의 이점도 강조합니다. 특정 유형(예: 문자열 또는 시간)을 기대하는 함수에 값을 전달하는 등 특정 경우에는 인터페이스에 대한 포인터가 암시적 변환을 피하는 데 도움이 될 수 있습니다.
이러한 지침을 따르면 개발자는 다음을 정확하게 수행할 수 있습니다. 반사를 검색합니다. 프리미티브에서 유래한 종류의 유형으로 Go의 반사 기능에 대해 더 깊이 이해하게 됩니다.
위 내용은 Go에서 기본 요소의 기반이 되는 인터페이스 유형의 'reflect.Kind'를 어떻게 검색할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!