Основы Go

Теория: Сравнение срезов

Срезы (slices) в Go нельзя сравнивать напрямую с помощью операторов == или !=. Компилятор не позволит выполнить сравнение двух срезов, даже если они имеют одинаковую длину и значения.

a := []int{1, 2, 3}
b := []int{1, 2, 3}

fmt.Println(a == b) // ошибка компиляции

Как сравнивать срезы

Для сравнения содержимого срезов используется пакет slices из стандартной библиотеки, который содержит функцию slices.Equal().

import "slices"

a := []int{1, 2, 3}
b := []int{1, 2, 3}
fmt.Println(slices.Equal(a, b)) // => true

Сравнение на равенство ссылок

Если необходимо проверить, ссылаются ли два среза на один и тот же массив в памяти, можно сравнить &a[0] и &b[0] при условии, что оба среза непустые. Это используется редко.

a := []int{1, 2, 3}
b := a
fmt.Println(&a[0] == &b[0]) // => true

Проверка на nil

Срезы можно сравнивать с nil. Срез, объявленный без инициализации, равен nil.

var s []int
fmt.Println(s == nil) // => true

empty := []int{}
// пустой, но не nil
fmt.Println(empty == nil) // => false

Рекомендуемые программы

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845