Go Generics: 맵 키에 대한 유형 제약 조건
Go1.18에서 맵 키로 사용할 수 있는 일반 연결 목록 정의 "Cons[int]가 비교 가능한 항목을 구현하지 않습니다." 오류와 함께 실패합니다. 이는 맵 키가 당황하지 않고 동등 검사(== 및 !=)를 지원하도록 보장하는 비교 가능한 인터페이스를 구현하기 위한 엄격한 요구 사항 때문입니다.
Go 1.20 업데이트
Go 1.20에서는 이제 비교 가능한 제약 조건이 지도 키에 대한 올바른 포괄 제약으로 간주됩니다. Go 사양에 따라 비교 가능한 것으로 간주되는 유형은 비교가 패닉이 발생하더라도 제약 조건을 충족합니다. 이는 사양에 따라 비교할 수 있는 유형과 엄격하게 비교할 수 있는 유형 간의 불일치를 해결합니다.
Go 1.18 및 1.19 고려 사항
Go 1.18 및 1.19에서는 비교 가능한 제약 조건은 당황하지 않고 == 및 !=를 지원하는 엄격하게 비교 가능한 유형에 의해서만 인스턴스화될 수 있습니다. 이는 인터페이스를 제외했습니다. 항등 연산자를 지원함에도 불구하고 인터페이스의 동적 유형과 값이 비교되었기 때문에 비교 기능을 구현하지 않았습니다. 이는 List[X] 유형의 필드가 포함된 제공된 Cons 구조체가 비교 가능한 항목을 구현할 수 없음을 의미합니다.
대체 제약 조건
이 제한 사항을 해결하려면, 비교 가능한 항목을 포함하는 사용자 정의 제약 조건은 인터페이스 필드를 사용하는 대신 맵 키 구조체로 정의하고 구현할 수 있습니다. 예를 들면 다음과 같습니다.
type List interface { comparable isList() bool }
결론적으로, 이제 Go 1.20에서는 비교 가능한 제약 조건이 맵 키에 권장되는 유형 제약 조건이 되었습니다. Go 1.18 및 1.19에서는 무한한 유형 집합으로 인해 인터페이스를 비교 대상으로 인스턴스화할 수 없었습니다. 비교 가능한 내용을 포함하는 사용자 지정 제약 조건을 대안으로 사용할 수 있습니다.
위 내용은 맵 키에 대한 Go의 유형 제약 조건은 버전 1.18, 1.19 및 1.20에서 어떻게 발전했나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!