Go에서는 유형 인수가 제네릭 인스턴스화의 특성으로 인해 발생하더라도 제네릭을 다른 유형에 할당할 수 없습니다.
일반 유형 Go
일반 유형은 다양한 데이터 유형과 함께 사용할 수 있는 템플릿을 정의하여 코드 재사용을 허용합니다. 일반 유형을 인스턴스화할 때 구체적인 유형 인수를 제공하여 사용되는 특정 데이터 유형을 지정합니다.
할당 제한
한 일반 유형의 값을 다른 유형에 할당하면 항상 허용되는 것은 아닙니다. 이는 서로 다른 유형 인수를 사용하여 제네릭 유형을 인스턴스화하면 두 개의 서로 다른 명명된 유형이 생성되기 때문입니다.
예:
type Props[G Generic] struct{} type Example struct{} func (Example) ID() string { return "" } var ExampleProps = Props[Example]{} func Problem() Props[Generic] { return ExampleProps // Compilation error }
이 예에서 예제는 Generic 인터페이스를 구현합니다. 그러나 Props[예제]와 Props[일반]은 여전히 다른 유형으로 간주됩니다. 따라서 문제(Props[일반]을 반환함)에 예제Props(Props[Example] 유형)를 할당하는 것은 허용되지 않습니다.
해결 방법
원하는 경우 제네릭 유형 간에 값을 할당하려면 유형 매개변수를 사용하여 제네릭 유형을 인스턴스화할 수 있습니다. 예를 들면 다음과 같습니다.
func Problem[T Generic](v T) Props[T] { return Props[T]{Value: v} }
이 경우 Problem은 일반 매개변수 T를 사용하고 T로 Props를 인스턴스화합니다. 이는 더 많은 유연성을 허용하고 유형 인수가 특정 조건을 충족하는 상황에서 사용할 수 있습니다.
위 내용은 유형 인수가 호환되는 경우에도 Go에서 하나의 일반 유형을 다른 일반 유형에 할당할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!