인터페이스 메서드의 유형 매개변수: Go Generics의 진퇴양난
Go가 제네릭을 추구하는 과정에서 특이한 걸림돌이 나타납니다. 바로 유형 금지입니다. 인터페이스 메소드 정의 내의 매개변수. 키/값 저장소를 추상화하려고 시도하는 개발자에게 발생하는 이러한 제한으로 인해 왜 그리고 솔루션이 존재하는지 궁금해집니다.
제한 뒤에 숨어 있는 이론적 근거
The Go 핵심 팀은 여러 인터페이스의 유형 매개변수를 허용하지 않도록 의도적으로 디자인 결정을 내렸습니다. 이유:
제한 우회
제한이 좌절스러울 수 있지만 극복할 수 없는 것은 아닙니다. 유형 매개변수 제안에서 제안된 솔루션은 유형 매개변수를 인터페이스 유형 정의 자체로 이동하는 것입니다.
type Reader[V Unmarshaler] interface { Read(bucket []byte, k ...[]byte) ([][]byte, error) ReadDoc(bucket []byte, factory func() (V, error), k ...[]byte) ([]V, error) } type Unmarshaler interface { UnmarshalKV(v []byte) error }
이 접근 방식을 사용하면 언어의 디자인 제약 조건을 유지하면서 유형이 안전한 일반 인터페이스를 사용할 수 있습니다.
위 내용은 Go Generics는 인터페이스 메소드 정의에서 유형 매개변수를 처리할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!