>백엔드 개발 >Golang >일반 인터페이스에서 유형 제약 조건을 사용할 때 Go의 'Cannot Infer V' 오류를 어떻게 해결할 수 있습니까?

일반 인터페이스에서 유형 제약 조건을 사용할 때 Go의 'Cannot Infer V' 오류를 어떻게 해결할 수 있습니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-13 13:45:11424검색

How Can I Resolve Go's

V를 추론할 수 없음: 제약 조건 구현에서 유형 매개변수 추론 해결

목표는 Go에서 결과 저장 및 로드를 지원하는 인터페이스를 만드는 것입니다. 다양한 데이터 유형을 지원하면서 다른 데이터베이스에 있습니다.

type WritableType interface {
    ~int | ~string | ~float64
}

type ConfigStorage[K, V WritableType] interface {
    get(key K) (V, error)
    set(key K, value V) (bool, error)
}

문제는 파일 시스템 저장소:

type FileSystemStorage[K, V WritableType] struct {
}

func (f FileSystemStorage[K, V]) get(key K) (V, error) {
    // Code to load data from JSON file
}

func (f FileSystemStorage[K, V]) set(key K, value V) (bool, error) {
    // Code to save data as JSON file
}

SetValue를 호출하는 동안 성공적으로 작동합니다. 그러나 GetValue를 호출하면 컴파일러에 오류가 발생합니다.

cannot infer V

Solutions

Go 1.21 이상:

Go 1.21에서는 인터페이스 메소드에 사용되는 유형을 고려하도록 유형 추론이 개선되었습니다. 따라서 이제 유형 매개변수를 지정하지 않고 GetValue를 호출할 수 있습니다.

result, _ = GetValue(fileStorage, "key")

Go 1.20 이하의 경우:

현재 유형 추론 알고리즘은 추론을 허용하지 않기 때문입니다. V 제약 조건 구현에서 GetValue를 호출할 때 명시적인 유형 매개변수를 제공해야 합니다:

GetValue[string, string](fileStorage, "key")

위 내용은 일반 인터페이스에서 유형 제약 조건을 사용할 때 Go의 'Cannot Infer V' 오류를 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.