Sobes.tech
Back to questions
Senior
3

Можно ли сравнить два slice напрямую (a == b)?

Companies where asked
Магнит Тех

Answer from AI

sobes.tech AI

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

Чтобы сравнить два среза по содержимому, нужно сравнивать их элементы поэлементно. Например:

func equalSlices(a, b []int) bool {
    if len(a) != len(b) {
        return false
    }
    for i := range a {
        if a[i] != b[i] {
            return false
        }
    }
    return true
}

Для срезов байтов можно использовать bytes.Equal из стандартной библиотеки.