>  기사  >  백엔드 개발  >  기본 유형을 기반으로 하는 유형의 Reflect.Kind 가져오기

기본 유형을 기반으로 하는 유형의 Reflect.Kind 가져오기

WBOY
WBOY앞으로
2024-02-09 15:12:09572검색

기본 유형을 기반으로 하는 유형의 Reflect.Kind 가져오기

PHP 프로그래밍에서는 기본 유형을 기반으로 유형을 반영하는 것이 중요한 기술입니다. Reflect.Kind는 PHP에서 제공하는 리플렉션 클래스 라이브러리의 속성으로, 변수의 데이터 유형을 결정하는 데 사용할 수 있습니다. Reflect.Kind를 사용하면 변수의 유형을 쉽게 얻고 해당 작업 및 처리를 수행할 수 있습니다. PHP 개발자의 경우 이 기술을 익히면 리플렉션 메커니즘을 더 잘 이해하고 사용하며 코드의 가독성과 유연성이 향상됩니다. 이 기사에서 PHP 편집자 Baicao는 기본 유형을 기반으로 Reflect.Kind를 얻는 방법을 자세히 소개하고 독자가 이 지식 포인트를 더 잘 익히는 데 도움이 되는 몇 가지 실용적인 예와 기술을 공유합니다.

질문 내용

인터페이스를 구현하지만 구현이 기본 유형을 기반으로 하는 유형에 대해 Reflect.kind를 Reflect.interface로 사용하고 싶습니다. type id string

이 질문에 대한 또 다른 대답은 kind()를 호출할 때 Reflect.interfaces를 반환하는 모든 유형의 Reflect.type을 얻는 방법일 수 있습니다.

바둑 놀이터의 전체 예는 다음과 같습니다.

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())
}

Solution

reflect.typeof() (和 reflect.valueof()) 需要一个 接口{}。基本上,无论您传递给 reflect.typeof() 的值是什么,如果它还不是接口值,它将隐式包装在 interface{} 中。如果传递的值已经是接口值,则其中存储的具体值将作为 interface{} 넘어가세요.

인터페이스에 대한 포인터가 의미가 있는 드문 경우 중 하나인 이러한 "재패킹"을 피하려면 실제로 여기서는 피할 수 없습니다. 인터페이스 값에 대한 포인터를 전달해야 합니다.

따라서 인터페이스에 포인터를 전달하면 포인터는 "point-to-type"의 유형 설명자를 얻기 위해 interface{} 值中。您可以使用 type.elem()로 래핑됩니다. 즉, 포인터 유형의 유형 설명자가 될 포인터 유형의 요소 유형입니다. 당신이 찾고 있는 인터페이스 유형. p>

예:

으아악

출력 내용(go 놀이터에서 사용해 보세요):

으아악

관련 질문 보기: go에서 Reflect.valueof()와 value.elem()의 차이점은 무엇인가요?

위 내용은 기본 유형을 기반으로 하는 유형의 Reflect.Kind 가져오기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제