> Какие способы копирования слайса в Go существуют (Go)

Уровень: senior · Роль: backend · Категория: Технические вопросы

Компании: Ozon, Лига Цифровой Экономики

Стек: Go

> Пример ответа

В Go есть несколько способов копирования слайса, каждый со своими особенностями:

  1. С помощью встроенной функции copy - самый эффективный и идиоматичный способ. Копирует элементы из исходного слайса в целевой, но количество скопированных элементов равно минимальной длине двух слайсов.
GO
src := []int{1, 2, 3}
dst := make([]int, len(src))
copy(dst, src)
  1. Через append - простой способ, но создаёт новый слайс с той же ёмкостью, что и длина исходного. Подходит для быстрого копирования без предварительного выделения памяти.
GO
src := []int{1, 2, 3}
dst := append([]int(nil), src...)
  1. С помощью цикла for - даёт полный контроль над процессом, но менее лаконичен. Может быть полезен при необходимости дополнительной обработки элементов.
GO
src := []int{1, 2, 3}
dst := make([]int, len(src))
for i := range src {
dst[i] = src[i]
}
  1. Через slices.Clone (Go 1.21+) - новый способ, который создаёт независимую копию слайса, включая все элементы.
GO
import "slices"
src := []int{1, 2, 3}
dst := slices.Clone(src)

Важно помнить: все эти способы выполняют поверхностное копирование. Для слайсов с указателями или ссылочными типами (например, срез структур с указателями) потребуется ручное глубокое копирование.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью