В Go массив передаётся по значению независимо от размера. Срез передаёт небольшой дескриптор с общим базовым массивом, но это другой тип.
Если мы передаём большой массив (например, размером мегабайт) в функцию, он передаётся по ссылке автоматически или нет?
В Go массив передаётся по значению независимо от размера. Срез передаёт небольшой дескриптор с общим базовым массивом, но это другой тип.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
В Go массив передаётся по значению независимо от размера. Срез передаёт небольшой дескриптор с общим базовым массивом, но это другой тип.
Передача [N]T логически копирует весь массив; компилятор может оптимизировать физические операции без изменения семантики. Для совместного доступа используют *[N]T или []T, явно учитывая возможность изменения исходных данных. У среза копируются указатель, длина и ёмкость, а элементы остаются общими до перераспределения. Размер в мегабайт не включает автоматическую передачу массива по ссылке.