Передача срезов в функции в Go (справочная семантика)
Автор: Gary Clarke
Загружено: 2025-12-24
Просмотров: 73
Передача срезов в функции может поначалу удивлять, поскольку изменения, внесенные внутри функции, обычно отображаются в основной функции. В этом уроке по Go вы узнаете, почему срезы ведут себя таким образом, как работает базовый массив и что происходит при добавлении элемента в срез.
Что вы узнаете:
Почему передача среза в функцию не копирует базовые данные
Как срезы используют заголовок, указывающий на общий базовый массив
Почему изменение элементов через срез обновляет исходный массив
Что происходит, когда при добавлении создается новый массив в зависимости от его емкости
Концептуальное объяснение:
Срезы в Go имеют семантику ссылок. Срез содержит небольшой заголовок, указывающий на базовый массив, где хранятся фактические данные. Когда вы передаете срез в функцию, Go копирует только заголовок, а не базовый массив. Этот заголовок по-прежнему указывает на то же базовое хранилище, поэтому обновления элементов влияют на те же данные, которые видит вызывающая сторона. Однако, когда вы добавляете элемент в срез и емкости недостаточно, Go создает новый базовый массив и копирует данные. После этого срезы перестают обмениваться данными.
Применение:
Начав писать вспомогательные функции, вы часто будете передавать срезы для обработки или обновления данных. Понимание семантики ссылок помогает писать эффективный код и избегать путаницы, когда изменения происходят в неожиданных местах. Это понимание также подготовит вас к работе с большими структурами данных, где копирование будет дорогостоящим.
Основные выводы:
Передача среза в функцию передает копию заголовка, а не данных.
Изменение элементов через срез обновляет общий базовый массив.
Присваивание среза другой переменной создает еще одну ссылку на те же данные.
Добавление к срезу может создать или не создать новый массив, в зависимости от его емкости.
Когда создается новый массив, срезы перестают обмениваться данными.
Перед тем, как проверить решение, попробуйте выполнить задание из видео.
Ссылки:
Папка с уроками на GitHub: https://github.com/GaryClarke/go-byte...
Создайте свое первое приложение на Go вместе со мной: https://www.garyclarke.tech/p/build-y...
Подпишитесь на рассылку, чтобы получать новые уроки и ресурсы: https://content.garyclarke.tech/go-by...
Подписывайтесь на нас в X/Twitter: / garyclarketech
Свяжитесь с нами в LinkedIn: / garyclarketech
Подпишитесь на канал, чтобы получать больше уроков по Go.
#golang #go #programming #coding #learnprogramming #gobytes
Доступные форматы для скачивания:
Скачать видео mp4
-
Информация по загрузке: