Maison >développement back-end >Golang >Essayer de comparer deux valeurs de type V avec les génériques Go ne fonctionne pas

Essayer de comparer deux valeurs de type V avec les génériques Go ne fonctionne pas

WBOY
WBOYavant
2024-02-09 12:39:09548parcourir

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

Éditeur PHP Apple a découvert qu'en langage Go, deux valeurs de type V ne peuvent pas être directement comparées lors de l'utilisation de génériques. Cela signifie que les comparaisons ne peuvent pas être effectuées simplement en utilisant == ou != comme vous le pouvez avec des chaînes ou des entiers. En effet, les génériques sont implémentés différemment et ne peuvent pas comparer directement les valeurs. Dans ce cas, nous devons utiliser une fonction ou une méthode de comparaison personnalisée pour effectuer l'opération de comparaison afin d'obtenir la fonctionnalité dont nous avons besoin. C’est un détail auquel il faut prêter attention, notamment lors de l’écriture de code impliquant des génériques.

Contenu des questions

version go : go1.21rc2

J'écris une fonction en go en utilisant des génériques qui prend une valeur et renvoie vrai/faux si la valeur est dans une carte.

Dans la version 1 ci-dessous, je ne comprends pas pourquoi cela fonctionne désormais lorsque les deux valeurs sont de type any时无法比较?但是在版本 2 中转换为 any... Je suppose qu'il me manque quelque chose d'évident, mais je ne comprends pas très bien cela.

Version 1 (ne fonctionne pas) :

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
}

Version 2 (fonctionnelle):

func InValues[M ~map[K]V, K comparable, V any](m M, v V) bool {
    for _, x := range maps.Values(m) {
        if any(x) == any(v) {
            return true
        }
    }
    return false
}

Solution

V 需要是 comparable 才能允许 ==.
Convertissez en any 然后比较有效,因为它在 any 之间使用非通用 == , ce qui est toujours autorisé.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer