Если мы передаём большой массив (например, размером мегабайт) в функцию, он передаётся по ссылке автоматически или нет?

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

Короткий ответ

Что ответить на собеседовании

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

Подробный разбор

Ответ с пояснениями

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

Передача [N]T логически копирует весь массив; компилятор может оптимизировать физические операции без изменения семантики. Для совместного доступа используют *[N]T или []T, явно учитывая возможность изменения исходных данных. У среза копируются указатель, длина и ёмкость, а элементы остаются общими до перераспределения. Размер в мегабайт не включает автоматическую передачу массива по ссылке.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее