Maison > développement back-end > Golang > le corps du texte

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

WBOY
Libérer: 2024-02-09 12:39:09
avant
514 Les gens l'ont consulté

尝试比较 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
}
Copier après la connexion

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
}
Copier après la connexion

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!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!