Найти в Дзене

Массивы и слайсы в golang

Для начала хотелось бы сказать, что же такое массивы и слайсы. Вопросы и задачи с объяснениями Массив в Go - это структура данных, которая представляет собой упорядоченную последовательность элементов одного типа фиксированной длины.  Давайте рассмотрим на примере:
На картинке выше был создан массив с 3-мя элементами и типом данных int. После создания массива мы не можем изменять его вместительность, однако можем менять сами элементы. Каждый элемент массива, имеет свой индекс. Для простоты понимания, на фото я сделал элемент, равный индексу. Индексация в golang, как и в других языках программирования начинается с 0. Давайте рассмотрим и другие способы создания массива Массивы в golang являются обычными значениями, так, что при их вызове, они просто копируются, поэтому при передаче или присваивании массивов создается копия их содержимого. Если мы в одной функции создадим массив, и внесём какие то изменения в другой функции, то оригинальный массив не изменится. На фото мы создали
Оглавление

Для начала хотелось бы сказать, что же такое массивы и слайсы.

Вопросы и задачи с объяснениями

Массивы

Массив в Go - это структура данных, которая представляет собой упорядоченную последовательность элементов одного типа фиксированной длины. 

Давайте рассмотрим на примере:

-2

На картинке выше был создан массив с 3-мя элементами и типом данных int.

После создания массива мы не можем изменять его вместительность, однако можем менять сами элементы.

Каждый элемент массива, имеет свой индекс. Для простоты понимания, на фото я сделал элемент, равный индексу. Индексация в golang, как и в других языках программирования начинается с 0.

Давайте рассмотрим и другие способы создания массива

что выведет fmt.Println(arr2[1])?
что выведет fmt.Println(arr2[1])?

Массивы в golang являются обычными значениями, так, что при их вызове, они просто копируются, поэтому при передаче или присваивании массивов создается копия их содержимого.

Если мы в одной функции создадим массив, и внесём какие то изменения в другой функции, то оригинальный массив не изменится.

-4

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

вывод в консоль
вывод в консоль

После того, как мы в общих чертах познакомились с массивами, можно перейти к слайсам.

Слайсы

Slice в Go- это структура данных динамического размера, которая "ссылается" на массив.

Слайсы создаются аналогично массивам, но имеют ряд отличий.

В работе со слайсами появляются такие термины, как длина(len) и ёмкость(capasity)

-6
-7

На картинке, мы создаём слайс и выводим его емкость и длину(после создания слайса его емкость и длина, равны)

После, мы добавляем в конец слайса новый элемент и смотрим на изменения длины и емкости. Емкость увеличилась в 2 раза.

Далее мы добавляем ещё 3 элемента, что бы снова переполнить слайс и емкость нового слайса так же удваивается.

Динамический размер:

- Размер слайса может изменяться в процессе работы программы.

Под капотом слайс состоит из:

- Указателя на массив (`pointer`).
- Длины (`len`).
- Ёмкости (`cap`).

Переаллокация памяти:

- Когда длина слайса превышает его ёмкость, Go выделяет новый массив с увеличенной ёмкостью (обычно в 2 раза больше).
- Старые данные копируются в новый массив.

-8

Подробная статья на хабре

Моё сообщество в Вк

Мой Телеграм канал

-Артемий Кожакин