> Происходит ли копирование данных при передаче слайса и массива в функцию в Go (Go)
Уровень: middle · Роль: backend · Язык: Go · Категория: Технические вопросы
Компании: Avito
Стек: Go
> Пример ответа
В Go при передаче в функцию массива происходит полное копирование всех его элементов (передача по значению). Массив - это значение фиксированной длины, и функция получает его копию. Изменения внутри функции не влияют на оригинал.
При передаче слайса копируется только заголовок слайса (структура из указателя на базовый массив, длины и ёмкости). Сами данные (элементы) не копируются - слайс ссылается на тот же базовый массив. Поэтому изменения элементов слайса внутри функции видны снаружи. Однако изменение длины/ёмкости (например, через append, если превышена ёмкость) создаёт новый массив и не затрагивает оригинальный слайс.
Пример:
GOfunc modify(arr [3]int, sl []int) {arr[0] = 100 // не влияет на оригиналsl[0] = 200 // влияет на оригиналsl = append(sl, 300) // не влияет на длину оригинала}func main() {a := [3]int{1,2,3}s := []int{1,2,3}modify(a, s)fmt.Println(a) // [1 2 3]fmt.Println(s) // [200 2 3]}
Итог: массив копируется полностью, слайс - нет (копируется только заголовок).
> Похожие задачи по Go
Какие сигналы существуют в операционной системе
Как описать схему базы данных для модели библиотеки с сущностями автор, книга, читатель и связями между ними
> Похожие задачи по backend
Какие сигналы существуют в операционной системе
Как описать схему базы данных для модели библиотеки с сущностями автор, книга, читатель и связями между ними
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью