Функция slices.Clone
Функция slices.Clone создает поверхностную копию слайса.
Она возвращает новый слайс, содержащий все элементы исходного.
В первый параметр мы передаем исходный слайс, который нужно скопировать.
Функция возвращает новый слайс того же типа и длины, что и оригинал.
Важно отметить, что копирование является поверхностным - элементы копируются
по значению, поэтому для слайсов, содержащих указатели или ссылочные типы,
элементы будут ссылаться на те же объекты.
Синтаксис
slices.Clone(original)
Функция принимает один параметр - исходный слайс, который нужно скопировать.
Пример
Давайте создадим копию слайса строк с помощью slices.Clone:
package 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)
}
Результат выполнения кода:
"Original: [a b c d e]"
"Clone: [a b c d e]"
Как видите, новый слайс содержит те же элементы, что и оригинал.
Пример
Давайте проверим, что изменения в оригинальном слайсе не влияют на копию:
package 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)
}
Результат выполнения кода:
"Original after changes: [10 20 3 4 5]"
"Clone after changes: [1 2 3 4 5]"
Изменения в оригинале не затрагивают копию, так как это независимые слайсы.
Важно понимать, что slices.Clone создает новый слайс с новой
внутренней структурой, но элементы копируются по значению.
Пример
Давайте посмотрим, как slices.Clone работает с пустым слайсом:
package 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))
}
Результат выполнения кода:
"Original: []"
"Clone: []"
"Original length: 0"
"Clone length: 0"
Для пустого слайса функция возвращает также пустой слайс.
Смотрите также
-
функцию
copy,
которая копирует элементы из одного слайса в другой -
функцию
slices.Equal,
которая проверяет равенство двух слайсов -
функцию
len,
которая возвращает длину слайса -
функцию
append,
которая добавляет элементы в конец слайса