Назад к вопросам
Junior
115
questionbank
Как работать со слайсами в Go?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Слайсы в Go не являются массивами, а ссылаются на сегмент (или весь) базового массива. Это динамические структуры данных.
Создание слайса:
- Из массива:
// определяем массив arr := [5]int{1, 2, 3, 4, 5} // создаем слайс из части массива s1 := arr[1:4] // s1 содержит элементы arr[1], arr[2], arr[3] s2 := arr[:3] // s2 содержит элементы arr[0], arr[1], arr[2] s3 := arr[2:] // s3 содержит элементы arr[2], arr[3], arr[4] s4 := arr[:] // s4 ссылается на весь массив - С помощью
make:// Создание слайса с длиной 5 и емкостью 5 s := make([]int, 5) // Создание слайса с длиной 5 и емкостью 10 s_cap := make([]int, 5, 10) - Литералом:
s := []int{1, 2, 3}
Основные свойства слайса:
len(s): возвращает текущую длину слайса.cap(s): возвращает емкость слайса (максимальное количество элементов, которое может содержаться до reallocation).
Добавление элементов (append):
s := []int{1, 2}
s = append(s, 3) // добавляет один элемент
s = append(s, 4, 5) // добавляет несколько элементов
s2 := []int{6, 7}
s = append(s, s2...) // добавляет элементы другого слайса
append может вызвать reallocation базового массива, если емкости недостаточно.
Удаление элементов:
Удаление элементов из слайса достигается путем создания нового слайса из оставшихся элементов или копирования.
s := []int{1, 2, 3, 4, 5}
// Удаление элемента по индексу i
i := 2 // удаляем элемент по индексу 2 (т.е. 3)
s = append(s[:i], s[i+1:]...)
Копирование слайсов:
src := []int{1, 2, 3}
dst := make([]int, len(src))
copy(dst, src) // копирует элементы из src в dst
copy копирует минимум из длин двух слайсов.
Итерация по слайсу:
s := []string{"a", "b", "c"}
for i, v := range s {
// i - индекс, v - значение
}
for i := range s {
// только индекс
}
for _, v := range s {
// только значение
}
Слайсы являются ссылочными типами:
Изменения в слайсе отображаются на базовом массиве и других слайсах, ссылающихся на ту же область памяти.
arr := [5]int{1, 2, 3, 4, 5}
s1 := arr[1:4] // [2, 3, 4]
s2 := arr[2:5] // [3, 4, 5]
s1[0] = 99
// Теперь arr: [1, 99, 3, 4, 5]
// s1: [99, 3, 4]
// s2: [3, 4, 5] (элемент arr[2] изменился)