>백엔드 개발 >Golang >Go에서 기본 유형을 기반으로 인터페이스를 구현하는 유형에 대해 `reflect.Kind.Interface`를 검색하는 방법은 무엇입니까?

Go에서 기본 유형을 기반으로 인터페이스를 구현하는 유형에 대해 `reflect.Kind.Interface`를 검색하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-31 05:30:12622검색

How to Retrieve `reflect.Kind.Interface` for a Type Implementing an Interface Based on a Primitive Type in Go?

reflect.Kind 검색 중 기본 유형을 기반으로 한 유형

Go에서는 Reflect를 결정합니다. 유형의 종류는 까다로울 수 있습니다. 유형이 기본 유형을 기반으로 인터페이스를 구현하는 경우. 예를 들어, 다음 시나리오를 고려하십시오.

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 유형으로 구현됩니다. Reflect.TypeOf(id).Kind()가 Reflect.Interface를 반환하기를 원하지만 대신 Reflect.String을 반환합니다.

인터페이스에 대한 포인터를 사용하는 솔루션

To 이 문제를 해결하려면 Reflect.TypeOf()에는 인터페이스{}가 필요하다는 점을 기억해야 합니다. 인터페이스가 아닌 값으로 작업할 때 Go는 해당 값을 암시적으로 인터페이스에 자동으로 래핑합니다.{} 이를 방지하기 위해 인터페이스에 대한 포인터를 사용할 수 있습니다.

t := reflect.TypeOf(&id).Elem()
fmt.Println(t.Kind())

reflect.TypeOf(&id).Elem()을 사용하여 ID 인터페이스의 유형 설명자를 검색합니다. 관심이 있습니다. Elem() 메소드는 인터페이스 유형인 포인터 유형의 요소 유형을 제공합니다.

이제 업데이트된 코드를 실행하면 출력:

test
main.ID
interface

기본 유형을 기반으로 인터페이스를 구현하는 유형에 대한 Reflect.Kind를 올바르게 얻는 방법을 보여줍니다.

위 내용은 Go에서 기본 유형을 기반으로 인터페이스를 구현하는 유형에 대해 `reflect.Kind.Interface`를 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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