>백엔드 개발 >Golang >유형 매개변수 없이 일반 구조체의 유형 이름 가져오기

유형 매개변수 없이 일반 구조체의 유형 이름 가져오기

王林
王林앞으로
2024-02-13 12:27:071218검색

유형 매개변수 없이 일반 구조체의 유형 이름 가져오기

이 기사에서는 PHP 편집기 Strawberry가 유형 매개변수 없이 일반 구조의 유형 이름을 얻는 방법을 소개합니다. 제네릭은 특정 유형을 지정하지 않고도 일반 코드를 작성할 수 있는 강력한 프로그래밍 기술입니다. 그러나 때로는 특정 유형 매개변수를 포함하지 않고 일반 구조의 유형 이름을 얻어야 할 수도 있습니다. 이 기사에서는 이 질문에 대해 자세히 답변하고 일반 프로그래밍을 더 잘 이해하고 적용하는 데 도움을 줄 것입니다.

질문 내용

다음과 같이 각각을 식별하는 foo 的通用结构,我从中创建了两个对象。我可以使用 reflect.typeof()라는 특정 유형이 있다고 가정해 보겠습니다.

으아악

저는 이러한 객체의 공통 유형(예: foo),而不是具体类型(即 foo[string]foo[int])을 결정하는 데 관심이 있습니다. 이것이 가능합니까, 아니면 이러한 문자열에서 일반 유형을 수동으로 추출해야 합니까(예: 정규식 사용)?

편집

정규 표현식은 다음과 같습니다:

으아악

나도 이 질문을 봤지만 특정 유형(예: main.foo[string])而不是通用类型(即, foo)을 제공하기 때문에 질문에 대한 답변이 아닙니다.

해결 방법

기본 유형이 런타임에 존재하지 않기 때문에 Reflection은 "기본" 일반 유형의 이름을 볼 수 없습니다.

go 사양의 관련 단락은 instantiation입니다.

유형을 인스턴스화하면 제네릭이 아닌 새로운 이름의 유형이 생성됩니다. 함수를 인스턴스화하면 제네릭이 아닌 새로운 함수가 생성됩니다.

글을 쓸 때:

으아악

타입 이름은 바로 foo[int] 입니다.

형 인수 목록이 없는 식별자 foo는 컴파일 타임에 관련이 있다는 점에 주목할 가치가 있습니다. 동일한 패키지에서 이를 다시 선언하는 것을 방지하기 때문입니다. 유형 정의:

유형 정의는 동일한 유형으로 새롭고 다른 유형을 생성합니다. 기본 유형과 작업은 유형과 경계로 제공됩니다. 식별자, 이름 입력, 제공 .

으아악

그러나 위에서 언급한 것처럼 인스턴스화는 foo 과 다른 새로운 명명된 유형을 생성하며, 런타임에는 리플렉션을 사용할 수 있는 경우에만 인스턴스화를 처리합니다.

요약하자면, 일부 도우미 함수가 stdlib에 추가되기 전까지는 정규식 솔루션이 허용된다고 생각합니다. 명확성을 위해 여기에 다시 게시합니다:

으아악

type.string()type.name()의 차이점을 기억하세요. 모든 유형은 문자열 표현을 가질 수 있지만 명명된 유형에만 이름이 있습니다. (분명히 그렇죠?) 예를 들어 다음과 같이 작성했다면:

으아악

그런 다음 b的类型为*foo[int],为匿名复合类型,name()는 빈 문자열을 반환합니다.

위 내용은 유형 매개변수 없이 일반 구조체의 유형 이름 가져오기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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