리플렉션을 사용하여 Go의 이름에서 유형 표현 가져오기
질문:
어떻게 할 수 있나요? Go의 리플렉션을 사용하여 이름에서 유형 표현을 얻습니다. 도서관?
답변:
이 질문을 이해하는 것은 해석에 달려 있습니다. 기본적으로 두 가지 관점이 있습니다.
런타임 접근성 불가:
런타임 시 유형 이름이 문자열로 제공되는 경우 유형 표현으로 변환할 수 없습니다. 명시적으로 참조되지 않은 유형은 최종 실행 가능 바이너리에 포함되지 않아 런타임에 액세스할 수 없게 될 수 있습니다.
"코딩" 시간 접근성:
그러나 코딩(소스 코드 생성 또는 생성), 지정된 유형의 변수를 생성하고 호출하지 않고도 이를 달성할 수 있습니다. Reflect.TypeOf().
임베디드 유형 얻기:
유형이 지정된 nil 포인터 값을 사용하고 포인터의 Reflect.Type 설명자에서 다음을 사용하여 포인터의 기본 또는 요소 유형 Type.Elem().
예:
t := reflect.TypeOf((*YourType)(nil)).Elem()
이 접근 방식은 변수를 생성하여 얻은 설명자(t2)와 동일한 유형 설명자(t)를 생성합니다. 종류와 사용방법 Reflect.TypeOf():
var x YourType t2 := reflect.TypeOf(x) fmt.Println(t, t2) fmt.Println(t == t2)
출력:
main.YourType main.YourType true
결론:
유형을 검색하는 동안 컴파일 제약으로 인해 런타임에는 표현이 가능하지 않습니다. 코딩 시간에는 다음을 사용하여 포함된 유형에 액세스하여 가능합니다. 입력된 nil 포인터 접근 방식.
위 내용은 컴파일 타임에 해당 이름에서 Go 유형 표현을 어떻게 얻을 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!