동일한 유형의 일반 인스턴스를 서로 할당할 수 없는 이유는 무엇입니까?
Go에서는 일반 유형의 인스턴스를 다른 유형으로 할당하는 것을 금지합니다. 형식 인수가 인터페이스 관계를 충족하는 경우에도 서로 인수합니다. 이를 설명하기 위해 다음 코드를 고려하십시오.
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
이 오류는 새 유형 인수로 일반 유형을 인스턴스화하면 생성되기 때문에 발생합니다. 독특한 유형. 구체적으로:
이 두 유형은 그렇지 않습니다. 예제가 Generic을 구현한다는 사실에도 불구하고 상호 교환이 가능합니다. 따라서 Props[Generic]에 예제Props(Props[Example]의 인스턴스)를 할당하는 것은 유효하지 않습니다.
이 동작은 any로 인스턴스화된 제네릭으로 확장됩니다. any는 단지 빈 인터페이스(interface{})의 별칭을 지정하는 정적 유형입니다. 이는 "모든 유형" 또는 T와 동일하지 않습니다. 따라서 any로 인스턴스화된 유형은 다른 특정 유형으로 인스턴스화된 유형에 할당할 수 없습니다.
이 문제를 해결하려면 유형 매개변수를 사용하여 Props를 인스턴스화할 수 있습니다. , 함수의 입력 및 출력 유형이 모두 일관되도록 합니다. 예:
type Props[G Generic] struct{ Value G } func Problem[T Generic](v T) Props[T] { return Props[T]{ Value: v } } func main() { a := Problem(Example{}) fmt.Println(a) }
위 내용은 왜 다른 유형 인수를 가진 Go의 일반 유형을 서로 할당할 수 없나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!