Go에서 파생된 인터페이스 유형의 종류 결정
Go에서 리플렉션의 복잡성을 탐색하는 것은 어려울 수 있으며, 특히 파생된 인터페이스 유형을 다룰 때 더욱 그렇습니다. 인터페이스와 기본 유형. 이 기사에서는 인터페이스를 구현하지만 기본 기본 구현이 있는 유형의 Reflect.Kind를 결정하는 방법을 살펴보겠습니다.
다음 코드 조각에서 질문이 발생합니다.
type ID interface { myid() } type id string func (id) myid() {} func main() { id := ID(id("test")) fmt.Println(id) fmt.Println(reflect.TypeOf(id)) // How to get the kind to return "reflect.Interface" from the var "id"? fmt.Println(reflect.TypeOf(id).Kind()) }
이 시나리오에는 ID라는 인터페이스와 id라는 문자열 유형이 있습니다. 그러나 id 유형의 구현에서는 id 문자열 유형을 사용합니다. 목표는 id 변수에서 Reflect.Kind를 Reflect.Interface로 검색하는 것입니다.
해결책
이 문제를 해결하는 열쇠는 리플렉션이 인터페이스를 처리하는 방식을 이해하는 데 있습니다. 가치. Reflect.TypeOf()에 값을 전달하면 인터페이스{}에 자동으로 래핑됩니다. 그러나 유형 정보를 보존하려면 인터페이스에 대한 포인터를 사용해야 합니다.
ID 인터페이스에 대한 포인터를 정의하고 이를 Reflect.TypeOf()에 전달하면 Elem( ) 인터페이스 유형의 실제 유형 설명자에 액세스합니다.
코드 예
다음 코드 스니펫은 솔루션을 보여줍니다.
id := ID(id("test")) fmt.Println(id) t := reflect.TypeOf(&id).Elem() fmt.Println(t) fmt.Println(t.Kind())
이 코드는 다음을 출력합니다.
test main.ID interface
이 기술을 활용하면 파생 인터페이스 유형의 Reflect.Kind를 정확하게 확인하고 기본 구현을 밝힐 수 있습니다. 자세히 알아보세요.
위 내용은 Go에서 파생 인터페이스 유형의 `reflect.Kind`를 어떻게 결정하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!