Wie kann ich überprüfen, ob zwei Scheiben gleich sind?
go
go-reflect
wei2912
quelle
quelle
==
Operator ist in Go nur für einige Typen definiert, daher ist diese Frage auch legitim.slice can only be compared to nil
Ich habe mich zufällig in Go entwickelt und bin darauf gestoßen. Ich habe mich gefragt, ob es einen idiomatischen Golang-Weg gibt, um die Slice-Gleichheit zu überprüfen. Wenn der Gleichheitsoperator nicht durch die Sprache definiert ist, finde ich es vernünftig, nach dem effizientesten Weg zu fragen um es zu erreichen. Die Frage musste nicht geschlossen werdenAntworten:
Sie müssen jedes der Elemente im Slice durchlaufen und testen. Gleichheit für Slices ist nicht definiert. Es gibt jedoch eine
bytes.Equal
Funktion, wenn Sie Werte vom Typ vergleichen[]byte
.quelle
for i, v := range a { if v != b[i] { return false } }
.Sie sollten Reflect.DeepEqual () verwenden.
quelle
Dies ist nur ein Beispiel für die Verwendung von Reflect.DeepEqual () , das in der Antwort von @ VictorDeryagin angegeben ist.
Ergebnis:
Probieren Sie es auf dem Go Playground aus
quelle
Wenn Sie zwei haben
[]byte
, vergleichen Sie sie mit bytes.Equal . Die Golang-Dokumentation sagt:Verwendungszweck:
Dies wird gedruckt
quelle
Und im Moment ist hier https://github.com/google/go-cmp welche
quelle
Wenn Sie daran interessiert sind, einen Test zu schreiben, dann
github.com/stretchr/testify/assert
ist Ihr Freund.Importieren Sie die Bibliothek ganz am Anfang der Datei:
Dann machen Sie im Test:
Der angeforderte Fehler lautet:
quelle
assert.Equal
Interne Verwendung,reflect.DeepEqual
die dazu führen kann, dass Ihre Tests langsamer ausgeführt werden und schließlich Ihre Pipeline.