The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Выпуск языка Go 1.20. SourceHut отменил блокировку зеркала м..."
Отправлено QrKot, 03-Фев-23 19:58 
Мэн, вам вдвоем с оппонентом надо таки в доку внимательно заглянуть.

Слайс таки ИМЕЕТ статическую длину, о чем совершенно верно говорит он. Но его обоснование "это неправильный объект" - ересь, о чем совершенно верно говоришь ты.

Просто поясню: Слайс - обёртка над массивом. А массив имеет таки константную длину, его длина НЕ меняется.
Весь фокус в том, что у слайса есть 2 важных параметра: cap (капасити, вместимость) и len (длина). В целом Слайс - это мощный массив статической длины cap, в котором заняты len элементов. Т.е. у тебя статический массив из, допустим, 10 элементов, в который ты уже "зааппендил" 9 штук. При этом память у тебя выделена для 10 элементов. Когда ты говоришь append ещё одного массива, он просто пишется в 10 позицию. И все норм, он "как бы изменил размерность", хотя мы оба отлично понимаем, что ничего он не делал...
Но это все фигня, веселье начинается, когда ты ещё раз говоришь append. Это одиннадцатый элемент, а памяти - только на 10. Что происходит в этот момент?
В этот момент создаётся НОВЫЙ слайс с cap1 = cap0*1.5, где cap0 - капасити исходного слайса. Потом элементы исходного слайса копируются в новый, и вот это ты получаешь на выходе.

Именно и только поэтому это выглядит не как someSlice.append(newElement), а как someSlice = append(someSlice, newElement). А "объекты" тут не при чем, хотя они в Go таки есть. Классов нет, а объекты - есть. Просто Слайс таки статический, а ресайз "резолвится" в создание нового объекта.

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
  Введите код, изображенный на картинке: КОД
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру