Jak mogę sprawdzić, czy dwa plasterki są równe?
go
go-reflect
wei2912
źródło
źródło
==
Operator definiuje Przejdź do tylko niektórych typów, tak zresztą, to pytanie jest również zasadny.slice can only be compared to nil
natknąłem się na niego , i zastanawiałem się, czy istnieje idiomatyczny sposób golanga, aby sprawdzić równość plasterków ... jeśli operator równości nie jest zdefiniowany przez język, uważam, że rozsądnie jest zapytać o najbardziej skuteczny sposób aby to osiągnąć. Pytanie nie musiało być zamknięteOdpowiedzi:
Musisz zapętlić każdy element w plasterku i przetestować. Równość plasterków nie jest zdefiniowana. Istnieje jednak
bytes.Equal
funkcja, jeśli porównujesz wartości typu[]byte
.źródło
for i, v := range a { if v != b[i] { return false } }
.Powinieneś użyć reflect.DeepEqual ()
źródło
To tylko przykład użycia reflect.DeepEqual () podanego w odpowiedzi @ VictorDeryagin.
Wynik:
Wypróbuj Go Playground
źródło
Jeśli masz dwa
[]byte
, porównaj je za pomocą bytes.Equal . Dokumentacja Golanga mówi:Stosowanie:
To zostanie wydrukowane
źródło
A na razie tutaj jest https://github.com/google/go-cmp które
źródło
Jeśli jesteś zainteresowany pisaniem testu, to
github.com/stretchr/testify/assert
jest twój przyjaciel.Zaimportuj bibliotekę na samym początku pliku:
Następnie w ramach testu wykonujesz:
Zgłoszony błąd to:
źródło
assert.Equal
zastosowania wewnętrzne,reflect.DeepEqual
które mogą sprawić, że testy będą działały wolniej, a ostatecznie potok.