>백엔드 개발 >Golang >Go에서 파생 인터페이스 유형의 `reflect.Kind`를 어떻게 결정하나요?

Go에서 파생 인터페이스 유형의 `reflect.Kind`를 어떻게 결정하나요?

Susan Sarandon
Susan Sarandon원래의
2025-01-02 12:34:40329검색

How to Determine the `reflect.Kind` of a Derived Interface Type in Go?

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

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