Уроки Golang с нуля /#17 - Срезы

preview_player
Показать описание


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

Синтаксис создания среза выглядит следующим образом:

```
slice := []тип{элемент1, элемент2, ...}
```

где `тип` - тип элементов среза, а `{элемент1, элемент2, ...}` - список элементов, из которых будет создан срез.

Срезы могут быть созданы из существующих массивов, других срезов или с помощью встроенной функции `make`. Для создания среза из массива можно указать диапазон индексов, например:

```
array := [5]int{1, 2, 3, 4, 5}
slice := array[1:4] // создание среза [2, 3, 4]
```

В данном примере `slice` будет содержать элементы с индексами от 1 до 3 (включая 1 и не включая 4) массива `array`.

Основные операции со срезами включают доступ к элементам, изменение размера, добавление элементов, копирование срезов и проверку их длины и емкости.

Срезы в Go также поддерживают механизм растущей емкости (capacity), который позволяет изменять размер среза, сохраняя уже имеющиеся элементы. Это позволяет избежать копирования данных при добавлении новых элементов в срез.

Срезы в Go являются ссылочными типами, поэтому при передаче среза в функцию происходит передача по ссылке, а не по значению. Это означает, что изменения в срезе внутри функции также отразятся на исходном срезе.

В целом, срезы в Go предоставляют мощный и эффективный инструмент для работы с коллекциями данных, и их использование является обычной практикой при разработке программ на этом языке.
Рекомендации по теме
Комментарии
Автор

У вас заблуждение в том, что срезы являются ссылочным типом. Они не являются таковыми. Структура среза состоит из:
1) указателя на начало массива
2) длина среза
3) вместимость среза
Поэтому, несмотря на то, что оба среза могут указывать на один и тот же массив, у них могут отличаться длина и вместимость. Соответственно в коде оба среза будут по-разному себя вести.

hunter-kmtn