>백엔드 개발 >Golang >Go에서 기본 요소의 기반이 되는 인터페이스 유형의 'reflect.Kind'를 어떻게 검색할 수 있나요?

Go에서 기본 요소의 기반이 되는 인터페이스 유형의 'reflect.Kind'를 어떻게 검색할 수 있나요?

Barbara Streisand
Barbara Streisand원래의
2024-12-24 06:45:31889검색

How Can I Retrieve the `reflect.Kind` of an Interface Type Underlying a Primitive in Go?

프리미티브 기반 유형에 대한 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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