В большинстве случаев вы захотите написать собственный код для сравнения элементов двух срезов.
// Equal проверяет, что a и b содержат одинаковые элементы.
// nil аргумент эквивалентен пустому срезу.
func Equal(a, b []int) bool {
if len(a) != len(b) {
return false
}
for i, v := range a {
if v != b[i] {
return false
}
}
return true
}
Однако для массивов вы можете использовать операторы сравнения == и !=.
a := [2]int{1, 2}
b := [2]int{1, 3}
fmt.Println(a == b) // false
Значения массива сравнимы, если значения типа элемента массива сравнимы. Два значения массива равны, если их соответствующие элементы равны.
Оптимизированный код для байтовых срезов
Чтобы сравнить байтовые срезы, используйте оптимизированные bytes.Equal. Эта функция также обрабатывает nil аргументы как эквивалент пустых срезов.
Универсальный код для рекурсивного сравнения
В целях тестирования вы можете использовать reflect.DeepEqual. Он сравнивает два элемента любого типа рекурсивно.
var a []int = nil
var b []int = make([]int, 0)
fmt.Println(reflect.DeepEqual(a, b)) // false
Производительность этой функции намного хуже, чем для приведенного выше кода, но она полезна в тестовых случаях, где простота и правильность имеют решающее значение.
Читайте также:
- Массивы, срезы и строки: механика работы append в Golang
- Срезы в Golang: внутреннее устройство и использование
- Эффективный Go: срезы (slices)
Комментариев нет:
Отправить комментарий