Ответ
Встроенная функция copy
копирует элементы из исходного слайса (src
) в целевой слайс (dst
). Она не создает новый слайс, а работает с уже выделенной памятью.
Сигнатура: func copy(dst, src []Type) int
Ключевые особенности:
- Возвращаемое значение: Возвращает количество скопированных элементов. Это число равно минимуму из длин
len(dst)
иlen(src)
. - Память не выделяется:
copy
не изменяет длину или вместимость целевого слайса. Еслиlen(dst)
меньшеlen(src)
, будут скопированы только первыеlen(dst)
элементов. - Безопасность при пересечении:
copy
корректно обрабатывает случаи, когдаdst
иsrc
указывают на одну и ту же область памяти (пересекаются). - Работа со слайсами: Аргументами функции должны быть слайсы. Чтобы скопировать из/в массив, нужно сначала получить из него слайс (например,
array[:]
). - Работа с
nil
: Копирование вnil
-слайс или из него безопасно и ничего не делает, возвращая0
.
Пример:
src := []int{10, 20, 30, 40} // len=4
dst := make([]int, 2) // len=2
numCopied := copy(dst, src)
// Результат:
// numCopied = 2 (минимум из 4 и 2)
// dst = [10, 20] (только 2 элемента поместилось)
// src = [10, 20, 30, 40] (исходный слайс не изменился)