>  기사  >  백엔드 개발  >  V 유형의 두 값을 Go 제네릭과 비교하려고 하면 작동하지 않습니다.

V 유형의 두 값을 Go 제네릭과 비교하려고 하면 작동하지 않습니다.

WBOY
WBOY앞으로
2024-02-09 12:39:09516검색

尝试比较 V 类型的两个值与 Go 泛型不起作用

PHP 편집기 Apple은 Go 언어에서 제네릭을 사용할 때 V 유형의 두 값을 직접 비교할 수 없다는 사실을 발견했습니다. 즉, 문자열이나 정수와 마찬가지로 단순히 == 또는 !=를 사용하여 비교할 수는 없습니다. 이는 제네릭이 다르게 구현되어 값을 직접 비교할 수 없기 때문입니다. 이 경우 필요한 기능을 달성하기 위해 사용자 정의 비교 함수 또는 방법을 사용하여 비교 작업을 수행해야 합니다. 이는 특히 제네릭과 관련된 코드를 작성할 때 주의해야 할 세부 사항입니다.

질문 내용

go 버전: go1.21rc2

저는 값을 취하고 값이 맵에 있으면 true/false를 반환하는 제네릭을 사용하여 go에서 함수를 작성하고 있습니다.

아래 버전 1에서는 두 값이 모두 유형일 때 왜 작동하는지 이해가 되지 않습니다. any时无法比较?但是在版本 2 中转换为 any... 뭔가 분명한 것이 빠진 것 같지만 이 부분이 잘 이해되지 않습니다.

버전 1(작동하지 않음):

으아악

버전 2(작동 중):

func invalues[m ~map[k]v, k comparable, v any](m m, v v) bool {
    for _, x := range maps.values(m) {
        if x == v {
            return true
        }
    }
    return false
}

솔루션

V 需要是 comparable 才能允许 ==.
항상 허용되는 any 然后比较有效,因为它在 any 之间使用非通用 == 로 변환합니다.

위 내용은 V 유형의 두 값을 Go 제네릭과 비교하려고 하면 작동하지 않습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제