Ответ
Слайс (slice) в Go — это гибкая и мощная структура для работы с последовательностями данных. В отличие от массива, размер слайса не фиксирован. Слайс представляет собой "вид" на базовый массив.
Основные операции:
-
Создание С помощью
make
можно создать слайс, указав его начальную длину (len
) и ёмкость (cap
). Ёмкость — это размер базового массива.// Создаем слайс целых чисел с длиной 0 и ёмкостью 10 s := make([]int, 0, 10)
-
Добавление элементов Функция
append
добавляет элементы в конец слайса. Если ёмкости не хватает, Go создаст новый, больший базовый массив и скопирует туда элементы.s = append(s, 1, 2, 3)
-
Получение длины и ёмкости
len()
возвращает количество элементов в слайсе, аcap()
— его ёмкость.length := len(s) // Длина capacity := cap(s) // Ёмкость
-
Получение среза (slicing) Можно создать новый слайс из существующего. Новый слайс будет ссылаться на тот же базовый массив.
// Элементы с индекса 1 до 3 (не включая) subSlice := s[1:3]
-
Копирование Функция
copy
копирует элементы из одного слайса в другой. Копируется минимальное количество элементов изlen(src)
иlen(dst)
.dest := make([]int, len(s)) copy(dest, s)
-
Итерирование Чаще всего для перебора элементов используется цикл
for ... range
.for index, value := range s { // ... }
-
Сравнение Слайсы можно сравнивать только с
nil
. Два не-nil слайса нельзя сравнить напрямую с помощью оператора==
(это вызовет ошибку компиляции). Для сравнения содержимого нужно проверять их поэлементно.if s == nil { // ... }
Важно: Слайс — это структура-дескриптор, содержащая указатель на базовый массив, длину и ёмкость. При передаче в функцию копия этого дескриптора передается по значению, но так как указатель внутри указывает на тот же массив, изменения элементов слайса внутри функции будут видны снаружи.