slice vs Map: Понимание ссылочного поведения параметра
в Go, срезы и карты обоих представляют типы ссылок. При изменении элемента в любом типе изменение отражается во всех срезах/картах, полученных из них. Это общее поведение модификации является результатом реализации карт, основанной на указателе, где модификации, сделанные через указатель, применяются к исходной карте.
, однако, при добавлении новых элементов, срезов и картов ведут себя по-разному. В приведенном примере приведенного кода добавление новых элементов на карту (EditMap) приводит к тому, что эти элементы доступны через исходную карту. Тем не менее, добавление к среза (Editslice) не влияет на исходный срез. Карты реализованы как указатели на структуры карты хеш -карты, в то время как срезы представляют собой легкие структуры, которые ссылаются на массив. При добавлении нового элемента к карте указатель остается постоянным, что приводит к видимости нового элемента во всех полученных картах.
контраста, при добавлении к ломтике, должен быть изменен заголовок Slice (описывающий длину среза, емкость и указатель массива). Однако, поскольку GO проходит переменные по значению, любые изменения, внесенные в копию заголовка Slice (в передаваемом параметре), не отражаются в исходном срезе.
. Для достижения последовательного поведения между срезами и картами можно реализовать срезы в виде указателей, аналогичных картам. Это гарантирует, что модификации, сделанные через указатели на ломтики, также изменяют исходный срез. Тем не менее, этот подход необычен в GO из -за отсутствия языковой поддержки для прохождения и работы с указателями среза. Вместо этого соглашение о возвращении новых срезов после модификации широко принято.
]Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3