Sobes.tech
Назад к вопросам
Junior — Middle
83

Объясните механизм работы срезов в языке программирования Go.

Ответ от нейросети

sobes.tech AI

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

Срез состоит из трёх компонентов:

  • указатель на первый элемент массива, который входит в срез,
  • длина (len) — количество элементов в срезе,
  • ёмкость (cap) — максимальное количество элементов, которые можно вместить, начиная с указателя.

При создании среза из массива или другого среза создаётся новый срез, который ссылается на тот же базовый массив. Изменения через срез отражаются в массиве и других срезах, ссылающихся на тот же участок.

Пример:

arr := [5]int{1, 2, 3, 4, 5}
s := arr[1:4] // срез элементов с индексами 1,2,3
fmt.Println(s) // [2 3 4]

s[0] = 20
fmt.Println(arr) // [1 20 3 4 5]

Если при добавлении элементов с помощью append срез превышает свою ёмкость, создаётся новый массив, и данные копируются туда, что позволяет срезу расширяться динамически.

Таким образом, срезы — это удобный способ работать с последовательностями без необходимости вручную управлять массивами и их размерами.