The OpenNET Project / Index page

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



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

Исходное сообщение
"Выпуск языка Go 1.20. SourceHut отменил блокировку зеркала м..."
Отправлено cheshirekot, 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 - это экземпляры этой сущности, т.е. ОБЪЕКТЫ.

 

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



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

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