Maison > Article > développement back-end > Comment tester l’équivalence des cartes dans 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.
Le package Reflect fournit la fonction DeepEqual qui compare de manière récursive les valeurs, y compris les cartes. Il vérifie :
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.
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.
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!