Какие основные операции доступны для слайсов (slices) в Go?

Ответ

Слайс (slice) в Go — это гибкая и мощная структура для работы с последовательностями данных. В отличие от массива, размер слайса не фиксирован. Слайс представляет собой "вид" на базовый массив.

Основные операции:

  1. Создание С помощью make можно создать слайс, указав его начальную длину (len) и ёмкость (cap). Ёмкость — это размер базового массива.

    // Создаем слайс целых чисел с длиной 0 и ёмкостью 10
    s := make([]int, 0, 10)
  2. Добавление элементов Функция append добавляет элементы в конец слайса. Если ёмкости не хватает, Go создаст новый, больший базовый массив и скопирует туда элементы.

    s = append(s, 1, 2, 3)
  3. Получение длины и ёмкости len() возвращает количество элементов в слайсе, а cap() — его ёмкость.

    length := len(s)     // Длина
    capacity := cap(s)   // Ёмкость
  4. Получение среза (slicing) Можно создать новый слайс из существующего. Новый слайс будет ссылаться на тот же базовый массив.

    // Элементы с индекса 1 до 3 (не включая)
    subSlice := s[1:3]
  5. Копирование Функция copy копирует элементы из одного слайса в другой. Копируется минимальное количество элементов из len(src) и len(dst).

    dest := make([]int, len(s))
    copy(dest, s)
  6. Итерирование Чаще всего для перебора элементов используется цикл for ... range.

    for index, value := range s {
        // ...
    }
  7. Сравнение Слайсы можно сравнивать только с nil. Два не-nil слайса нельзя сравнить напрямую с помощью оператора == (это вызовет ошибку компиляции). Для сравнения содержимого нужно проверять их поэлементно.

    if s == nil {
        // ...
    }

Важно: Слайс — это структура-дескриптор, содержащая указатель на базовый массив, длину и ёмкость. При передаче в функцию копия этого дескриптора передается по значению, но так как указатель внутри указывает на тот же массив, изменения элементов слайса внутри функции будут видны снаружи.