4utka_pyan
@4utka_pyan

Для чего нужны массивы в golang?

Судя по главе golang-book.ru/chapter-06-arrays-slices-maps.html и практике
Массив в golang имеет только фиксированную длину:
var x [5]int
Т.е. нельзя создать массив неопределённой длинны типа var x []int для этого существует срез:
var x []int

В учебнике пишут:
Срез это часть массива.

Но на деле срез это не всегда часть массива, т.к. он может существовать отдельно от него и никак не связан с ним. Т.е. в программе может быть срез и не быть ни одного массива.

Вопрос: для чего тогда массивы в языке сделаны?
Исключительно для того что бы заранее создать какой-то список у которого известна длина просто для ускорения работы программы (не надо подсчитывать ни длину, ни тип смотреть), ведь массивы выходит нельзя динамически сокращать или добавлять в них элементы? Можно только менять?
  • Вопрос задан
  • 814 просмотров
Решения вопроса 2
Если в программе есть срез, значит в памяти есть соответствующий ему массив. Вы сами его не создаёте, но рантайм гошки его создаёт.
Массив нужен как более низкоуровневый примитив, для ускорения работы в некоторых случаях, чтобы не плодить лишних указателей.
Ответ написан
Комментировать
@4iloveg
Full-Stack HTML Developer
Если не ошибаюсь то у среза механизм следующий: в нем заложен резерв для элементов. Но фактически он создает массив. т.е. по умолчанию резерв 2 элемента. Ты помещаешь в него 1,2 элемент и они находятся в памяти в сгенерированном массиве. Далее ты добавляешь 3 элемент и создается новый массив и в него помещаются эти 3 элемента и в резерве еще 1. И так далее в геометрической прогрессии.
Посмотрев на содержимое среза, ты увидишь все добавленные элементы (допустим 5 шт и резерв до 8). Но при этом в памяти будут находиться временно созданные массивы на 2 и 4 элемента.

https://www.youtube.com/watch?v=9Pk7xAT_aCU в этом видео рассказывается о основах.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы