Maison  >  Article  >  développement back-end  >  Comment tester l’équivalence des cartes dans Golang ?

Comment tester l’équivalence des cartes dans Golang ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-17 06:31:03715parcourir

How Do You Test the Equivalence of Maps in Golang?

Test d'équivalence des cartes en Golang

Dans les tests basés sur des tables, il est crucial d'affirmer l'égalité de deux cartes. Bien que les implémentations personnalisées et les conversions de chaînes puissent être fastidieuses, Golang propose une solution intégrée.

Utilisation de Reflect.DeepEqual

Le package Reflect fournit la fonction DeepEqual qui compare de manière récursive les valeurs, y compris les cartes. Il vérifie :

  • Valeurs nulles
  • Longueurs des cartes
  • Paires clé-valeur
import "reflect"

eq := reflect.DeepEqual(m1, m2)

Cette comparaison complète garantit une égalité précise tester des cartes de tout type (par exemple, map[string]bool, map[struct{}]interface{}). Notez qu'il nécessite des types d'interface comme arguments.

Détails d'implémentation

Le code source de Reflect. Le cas Map de DeepEqual révèle :

if p, ok := v1.(reflect.Map); ok && q, ok := v2.(reflect.Map) {
    if p.Len() != q.Len() {
        return false
    }
    for _, k := range p.Keys() {
        if !q.Has(k) || !DeepEqual(p.Elem(k).Interface(), q.Elem(k).Interface()) {
            return false
        }
    }
    return true
}

Il vérifie les valeurs nulles et les longueurs de carte. et des paires clé-valeur. En passant des types d'interface, il garantit la compatibilité avec diverses implémentations de cartes.

Conclusion

Utiliser Reflect.DeepEqual pour tester l'égalité des cartes dans Golang est une solution idiomatique et efficace. Il gère tous les cas extrêmes et garantit une comparaison précise pour tout type de carte. Cela simplifie les tests basés sur des tables et améliore la fiabilité de votre code.

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:
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