Go에서 유형 매개변수를 사용하여 일반 인터페이스를 정의하면 다음과 같은 문제가 발생할 수 있습니다. 이를 구현하고 사용할 때 추론 문제가 발생합니다. 이 문서에서는 이러한 시나리오에서 "V를 추론할 수 없음: 제약 조건 구현에서 유형 매개 변수 추론" 오류를 해결합니다.
V가 WritableType을 확장하는 유형 매개 변수 K 및 V가 있는 ConfigStorage 인터페이스를 고려해보세요. . 이 인터페이스의 파일 시스템 저장소 구현인 FileSystemStorage가 정의됩니다. 그런데 제네릭 함수 GetValue를 사용하려고 하면 V의 타입을 유추할 수 없어 컴파일 오류가 발생합니다.
Go 1.21 이상:
Go 1.21 이상에서는 메소드 시그니처를 고려하도록 유형 추론이 향상되어 문제가 해결되었습니다. 인터페이스. 메서드 서명의 형식 매개 변수에 대한 형식 인수는 해당 메서드의 일치하는 매개 변수에서 유추할 수 있습니다.
유형 제약 조건을 지정하지 않고 GetValue를 사용하려면:
result, _ = GetValue(fileStorage, "key")
Go 1.20 이하:
이전 Go 버전의 경우 제약 조건을 구현하는 유형에서 V 추론이 지원되지 않습니다. GetValue를 호출할 때 명시적인 유형 매개변수를 제공해야 합니다.
GetValue[string, string](fileStorage, "key")
GetValue 함수가 제공된 인수에서 V 유형을 추론하려고 시도하기 때문에 오류가 발생합니다. 첫 번째 인수인 스토리지 , 두 번째 인수인 key. 그러나 스토리지는 여러 유형을 구현할 수 있는 인터페이스 값이기 때문에 이러한 인수만으로는 V를 결정하는 데 충분한 정보를 제공하지 않습니다.
유형 매개변수를 명시적으로 지정하면 컴파일러에 대한 모호성이 제거됩니다. 이를 통해 유형 추론 알고리즘은 제공된 인수를 기반으로 V의 올바른 유형을 추론할 수 있습니다.
위 내용은 Go 일반 인터페이스에서 'V를 추론할 수 없습니다: 제약 조건 구현에서 유형 매개변수를 추론할 수 없습니다'를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!