Sobes.tech
Назад к вопросам
Senior
2

Можно ли слайс сравнивать через двойное равно (==)?

Компании, где спрашивали
SberAuto

Ответ от нейросети

sobes.tech AI

В Go слайсы нельзя сравнивать напрямую через оператор ==, за исключением сравнения с nil. Это связано с тем, что слайс — это структура, содержащая указатель на массив, длину и ёмкость, и оператор == не определён для сравнения содержимого.

Пример:

var a, b []int
fmt.Println(a == nil) // true
fmt.Println(b == nil) // true
// fmt.Println(a == b) // ошибка компиляции: invalid operation: a == b (slice can only be compared to nil)

Если нужно сравнить содержимое двух слайсов, необходимо делать это вручную, например, через цикл или с помощью функции из пакета reflect:

import "reflect"

func slicesEqual(a, b []int) bool {
    return reflect.DeepEqual(a, b)
}

Или написать свою функцию сравнения элементов по одному.