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

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

WBOY
풀어 주다: 2024-02-09 12:39:09
앞으로
557명이 탐색했습니다.

尝试比较 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으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿