The OpenNET Project / Index page

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



"Выпуск языка Go 1.20. SourceHut отменил блокировку зеркала модулей Go"
Версия для распечатки Пред. тема | След. тема
Форум Разговоры, обсуждение новостей
Исходное сообщение [ Отслеживать ]
Присылайте удачные настройки в раздел примеров файлов конфигурации на WIKI.opennet.ru.
. "Выпуск языка Go 1.20. SourceHut отменил блокировку зеркала м..." +/
Сообщение от cheshirekot (ok), 04-Фев-23, 08:42 
>> А ты не пробовал ну хотя бы вот этот пост прочитать и по второй ссылке в нём пройти перед тем, как включать менторский тон и пытаться объяснить азбуку?

Ну, ссылаться на GoTour - мощный аргумент, конечно. Особенно учитывая, что "A slice, on the other hand, is a dynamically-sized, flexible view into the elements of an array." переводится как "Слайс, с другой стороны, (динамической размерности) гибкое ПРЕДСТАВЛЕНИЕ элементов массив". Это, блин, вьюха.
И ссылка на реализацию именно это и подтверждает.

>> Ещё, советую внимание обратить на то, что сейчас идёт спор о терминологии, а не о сути. И в терминологии Go срез это составной тип с изменяемым размером, добавление в который производится при помощи append.

Да вот ни разу. В Go срез - это динамическое ПРЕДСТАВЛЕНИЕ элементов статического массива, о чем вам в доке явно и говорят.

Просто на пальцах:

sliceA := make([]int, 2, 5) - создать массив из 5 элементов, первые два инициализировать дефолтными значениями, поднять вьюху над полученным. В сухом остатке мы ВЫДЕЛИЛИ ПАМЯТЬ под 5(пять) элементов, и это РЕАЛЬНАЯ(предельная) длина слайса. Увеличить этот массив ВНУТРИ слайса мы не можем.
sliceB := append(sliceA, 1, 2, 3, 4) - что только что произошло? что лежит в sliceA, и что лежит в sliceB?

>> Да, переприсваиванием исходной переменной, в которой указатель на данные может измениться, а может и нет, изменится поле len, и возможно изменится поле cap.

Вот по этой вашей фразе я, видимо, имею право предположить, что вы считаете, что sliceA и sliceB идентичны? Ну вот нет, например!
"в которой указатель на данные может измениться" - нееееет, не так это работает. Внутри слайса "указатель на данные", который array unsafe.Pointer НЕ меняется. На выходе у нас будет ДВА РАЗНЫХ СЛАЙСА. Потому что там СЛАЙС целиком новый создается, а не указатель на нулевой элемент массива внутри слайса меняется.

Если бы у нас внутрь существующего слайса складировался новый массив - вопросов бы не было. Но. У нас создается НОВЫЙ слайс с новым массивом внутри, который и возвращается.

Уберите из инструкции присваивание, оставьте только append(sliceA, 1, 2, 3, 4) - знаете, что будет? Будет слайс с массивом [0,0,1,2,3] внутри. А все потому, что слайс, буквально, динамическое ПРЕДСТАВЛЕНИЕ элементов массива. Он умеет менять элементы массива, сам массив внутри константен со всеми вытекающими.

>> изменится поле len, и возможно изменится поле cap

Да что ж вы такое говорите, милчеловек. Поле cap НЕ изменится. Оно в пределах слайса КОНСТАНТА, о чем я вам уже вторые сутки и говорю
Поле cap внутри слайса неизменно. Если в cap появилась другая циферка, значит это другой слайс. Тчк.

>> Пруфлинки на "объекты в Go" в студию! Уверен, что у такого грамотного специалиста не должно быть с этим проблем. Только пожалуйста, не от анонимных ыкспертов или с какого-нибудь стекворерфлоу, а от разработчиков языка.

CS50 - достаточно авторитетный источник? "Объект - переменная, структура данных, функция или метод, значение в памяти, на который ссылается идентификатор."
Вы, видимо, сагрились на слово "объект" из-за ложной ассоциации с ООП? Нет. В базе любая инстанцированная сущность является объектом. Термин используется для того, чтобы четко разграничить тип (класс, декларацию) сущности и экземпляр (инстанцированный) этой сущности.
На всякий случай:
есть декларация struct A {} - это ТИП.
Если переменные a1, a2, a3 типа A - это экземпляры этой сущности, т.е. ОБЪЕКТЫ.

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

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



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

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