The OpenNET Project / Index page

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



"Выпуск языка Go 1.20. SourceHut отменил блокировку зеркала модулей Go"
Версия для распечатки Пред. тема | След. тема
Форум Разговоры, обсуждение новостей
Исходное сообщение [ Отслеживать ]
Заметили полезную информацию ? Пожалуйста добавьте в FAQ на WIKI.
. "Выпуск языка 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 таки есть. Классов нет, а объекты - есть. Просто Слайс таки статический, а ресайз "резолвится" в создание нового объекта.

Ответить | Правка | Наверх | Cообщить модератору

Оглавление
Выпуск языка Go 1.20. SourceHut отменил блокировку зеркала модулей Go, opennews, 02-Фев-23, 11:04  [смотреть все]
Форумы | Темы | Пред. тема | След. тема



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

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