Зарегистрируйтесь, чтобы продолжить обучение

Сравнение срезов Основы 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

Дополнительные материалы

  1. Пакет slices содержит полезные функции для работы со слайсами

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff