일반 유형 할당 제한
다음 코드를 고려하세요.
type Generic interface { ID() string } type Props[G Generic] struct{} type Example struct { id string } func (example Example) ID() string { return example.id } var ExampleProps = Props[Example]{} func Problem() Props[Generic] { return ExampleProps }
이 코드는 오류로 인해 컴파일되지 않습니다. :
cannot use ExampleProps (variable of type Props[Example]) as Props[Generic] value in return statement
왜? 이런 일이 발생합니까?
Go 제네릭은 다른 유형 인수로 인스턴스화될 때 완전히 새로운 명명된 유형을 생성합니다. 이 경우, 예제가 Generic을 구현하더라도 Props[Example] 및 Props[Generic]는 별개의 명명된 유형입니다.
유형 매개변수화를 통한 유연성
이 문제를 해결하려면 유연성을 유지하면서 유형 매개변수를 사용하여 Props를 인스턴스화할 수 있습니다.
func Problem[T Generic](v T) Props[T] { return Props[T]{Value: v} }
이 접근 방식은 다음과 같습니다. Generic을 구현하는 특정 제네릭 유형 T에 대해 Props[T]를 반환하는 함수입니다.
요약
Go 제네릭에서 다양한 유형 인수를 사용하여 제네릭 유형을 인스턴스화합니다. 결과적으로 고유한 명명된 유형이 생성됩니다. 따라서 해당 유형 인수가 특정 조건을 충족하더라도 한 유형을 다른 유형에 할당하는 것은 허용되지 않습니다. 유형 매개변수화를 사용하면 이러한 시나리오에서 유연성을 유지할 수 있는 솔루션이 제공됩니다.
위 내용은 Go Generics에서 `Props[Generic]`에 `Props[예제]`를 할당할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!