Maison >développement back-end >Golang >Essayer de comparer deux valeurs de type V avec les génériques Go ne fonctionne pas
É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.
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 }
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!