리플렉션을 통해 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!