> 백엔드 개발 > Golang > Go Reflection이 이름에서 유형 표현을 직접 얻을 수 있나요?

Go Reflection이 이름에서 유형 표현을 직접 얻을 수 있나요?

Patricia Arquette
풀어 주다: 2024-12-24 17:39:15
원래의
573명이 탐색했습니다.

Can Go Reflection Directly Obtain a Type's Representation from its Name?

리플렉션을 통해 Go의 이름에서 직접 유형 표현 얻기

Go의 리플렉션 라이브러리를 사용하여 유형을 파생시키는 것이 가능한지 의문이 생깁니다. 이름만으로 유형을 표현합니다. 이 질문의 동기는 사용자가 코드 생성 목적으로 유형 표현을 제공해야 하는 라이브러리에 있습니다.

런타임에

이러한 직접 변환은 유형 이름의 문자열 표현입니다. 컴파일 중에 명시적으로 참조되지 않는 유형은 실행 가능한 바이너리에 존재하지 않아 런타임 시 "알 수 없음"이 될 수 있습니다. 자세한 설명은 "클라이언트/서버 코드 분할"을 참조하세요. 해결 방법은 "Golang에서 특수 접두사 또는 접미사를 사용하여 모든 함수 호출"에서 찾을 수 있습니다.

코딩 중

그러나 소스 코드 작성 또는 생성 중에는 가능합니다. 주어진 유형의 변수를 생성하고 Reflect.TypeOf()를 호출하지 않고도 이를 달성할 수 있습니다. 유형에 대한 포인터로 시작하고 유형이 지정된 nil 포인터 값을 활용하면 Type.Elem()을 사용하여 포인터의 유형 설명자에서 기본 유형 설명자로 이동할 수 있습니다.

예는 다음과 같습니다.

t := reflect.TypeOf((*YourType)(nil)).Elem()
로그인 후 복사

변수 t로 표시되는 이 유형 설명자는 유형의 변수 x를 생성하여 파생된 t2 설명자와 동일합니다. YourType 및 적용 Reflect.TypeOf():

var x YourType
t2 := reflect.TypeOf(x)

fmt.Println(t, t2)
fmt.Println(t == t2)
로그인 후 복사

출력:

main.YourType main.YourType
true
로그인 후 복사

(Go Playground에서 사용해 보세요)

위 내용은 Go Reflection이 이름에서 유형 표현을 직접 얻을 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿