Функция slices.Clone

Функция slices.Clone создает поверхностную копию слайса. Она возвращает новый слайс, содержащий все элементы исходного. В первый параметр мы передаем исходный слайс, который нужно скопировать. Функция возвращает новый слайс того же типа и длины, что и оригинал. Важно отметить, что копирование является поверхностным - элементы копируются по значению, поэтому для слайсов, содержащих указатели или ссылочные типы, элементы будут ссылаться на те же объекты.

Синтаксис

goslices.Clone(original)

Функция принимает один параметр - исходный слайс, который нужно скопировать.

Пример

Давайте создадим копию слайса строк с помощью slices.Clone:

gopackage main

import (
  "fmt"
  "slices"
)

func main() {
  original := []string{"a", "b", "c", "d", "e"}
  clone := slices.Clone(original)

  fmt.Println("Original:", original)
  fmt.Println("Clone:", clone)
}

Результат выполнения кода:

go"Original: [a b c d e]"
"Clone: [a b c d e]"

Как видите, новый слайс содержит те же элементы, что и оригинал.

Пример

Давайте проверим, что изменения в оригинальном слайсе не влияют на копию:

gopackage main

import (
  "fmt"
  "slices"
)

func main() {
  original := []int{1, 2, 3, 4, 5}
  clone := slices.Clone(original)

  original[0] = 10
  original[1] = 20

  fmt.Println("Original after changes:", original)
  fmt.Println("Clone after changes:", clone)
}

Результат выполнения кода:

go"Original after changes: [10 20 3 4 5]"
"Clone after changes: [1 2 3 4 5]"

Изменения в оригинале не затрагивают копию, так как это независимые слайсы. Важно понимать, что slices.Clone создает новый слайс с новой внутренней структурой, но элементы копируются по значению.

Пример

Давайте посмотрим, как slices.Clone работает с пустым слайсом:

gopackage main

import (
  "fmt"
  "slices"
)

func main() {
  original := []string{}
  clone := slices.Clone(original)

  fmt.Println("Original:", original)
  fmt.Println("Clone:", clone)
  fmt.Println("Original length:", len(original))
  fmt.Println("Clone length:", len(clone))
}

Результат выполнения кода:

go"Original: []"
"Clone: []"
"Original length: 0"
"Clone length: 0"

Для пустого слайса функция возвращает также пустой слайс.

Смотрите также

  • функцию copy,
    которая копирует элементы из одного слайса в другой
  • функцию slices.Equal,
    которая проверяет равенство двух слайсов
  • функцию len,
    которая возвращает длину слайса
  • функцию append,
    которая добавляет элементы в конец слайса