Bei tabellengesteuerten Tests ist es entscheidend, die Gleichheit zweier Karten sicherzustellen. Während benutzerdefinierte Implementierungen und String-Konvertierungen umständlich sein können, bietet Golang eine integrierte Lösung.
Das Reflect-Paket stellt die DeepEqual-Funktion bereit, die Werte, einschließlich Karten, rekursiv vergleicht. Es prüft:
import "reflect" eq := reflect.DeepEqual(m1, m2)
Dieser umfassende Vergleich gewährleistet genaue Gleichheit Testen für Karten jeglicher Art (z. B. map[string]bool, map[struct{}]interface{}). Beachten Sie, dass Schnittstellentypen als Argumente erforderlich sind.
Der Quellcode für Reflect.DeepEquals Map-Fall zeigt:
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 }
Es überprüft Nullwerte und Kartenlängen und Schlüssel-Wert-Paare. Durch die Übergabe von Schnittstellentypen wird die Kompatibilität mit verschiedenen Kartenimplementierungen sichergestellt.
Die Verwendung von Reflect.DeepEqual zum Testen der Kartengleichheit in Golang ist eine idiomatische und effiziente Lösung. Es verarbeitet alle Randfälle und gewährleistet einen genauen Vergleich für jede Art von Karte. Dies vereinfacht tabellengesteuerte Tests und erhöht die Zuverlässigkeit Ihres Codes.
Das obige ist der detaillierte Inhalt vonWie testet man die Äquivalenz von Karten in Golang?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!