Как я могу проверить, равны ли два среза?
go
go-reflect
wei2912
источник
источник
==
Оператор определен в Go только для некоторых типов, поэтому , кроме того, этот вопрос также является законным.slice can only be compared to nil
, и мне было интересно, есть ли идиоматический способ golang для проверки равенства срезов ... если оператор равенства не определен языком, то я считаю разумным спросить наиболее эффективный способ чтобы сделать это. Вопрос не нужно было закрыватьОтветы:
Вам нужно перебрать каждый из элементов в срезе и протестировать. Равенство для ломтиков не определено. Однако есть
bytes.Equal
функция, если вы сравниваете значения типа[]byte
.источник
for i, v := range a { if v != b[i] { return false } }
.Вы должны использовать refle.DeepEqual ()
источник
Это всего лишь пример с использованием refle.DeepEqual (), который дан в ответе @ VictorDeryagin.
Результат:
Попробуйте в Go Playground
источник
Если у вас есть два
[]byte
, сравните их, используя bytes.Equal . Документация Голанга говорит:Использование:
Это напечатает
источник
А пока вот https://github.com/google/go-cmp, который
источник
В случае, если вы заинтересованы в написании теста, то
github.com/stretchr/testify/assert
это ваш друг.Импортируйте библиотеку в самом начале файла:
Затем внутри теста вы делаете:
Появится сообщение об ошибке:
источник
assert.Equal
внутреннее использование,reflect.DeepEqual
которое может сделать ваши тесты работать медленнее и в конечном итоге ваш конвейер.