Функция bytes.Clone
Функция bytes.Clone создает независимую копию переданного среза байтов.
Она принимает один параметр - исходный срез байтов, и возвращает новый срез,
содержащий те же данные, но с собственной выделенной памятью.
Это особенно полезно, когда нужно работать с копией данных, чтобы избежать
непреднамеренного изменения исходного среза.
Синтаксис
bytes.Clone(b []byte) []byte
Пример
Давайте создадим копию среза байтов с помощью bytes.Clone
и убедимся, что это действительно независимая копия:
package main
import (
"bytes"
"fmt"
)
func main() {
original := []byte("abcde")
copyBytes := bytes.Clone(original)
fmt.Printf("original: %q\n", original)
fmt.Printf("copy: %q\n", copyBytes)
}
Результат выполнения кода:
"original: \"abcde\""
"copy: \"abcde\""
Пример
Продемонстрируем, что изменения в копии не влияют на исходный срез:
package main
import (
"bytes"
"fmt"
)
func main() {
original := []byte("abcde")
copyBytes := bytes.Clone(original)
copyBytes[0] = 'X'
fmt.Printf("original: %q\n", original)
fmt.Printf("copy: %q\n", copyBytes)
}
Результат выполнения кода:
"original: \"abcde\""
"copy: \"Xbcde\""
Пример
Если передать пустой срез, функция вернет пустой срез, а не nil:
package main
import (
"bytes"
"fmt"
)
func main() {
var empty []byte
clonedEmpty := bytes.Clone(empty)
fmt.Printf("original is nil: %v\n", empty == nil)
fmt.Printf("cloned is nil: %v\n", clonedEmpty == nil)
fmt.Printf("cloned: %q\n", clonedEmpty)
}
Результат выполнения кода:
"original is nil: true"
"cloned is nil: false"
"cloned: \"\""
Смотрите также
-
функцию
bytes.Compare,
которая сравнивает два среза байтов -
функцию
bytes.Equal,
которая проверяет равенство двух срезов байтов -
функцию
bytes.Split,
которая разбивает срез байтов на под-срезы по разделителю -
функцию
bytes.ReplaceAll,
которая заменяет все вхождения под-среза на другой