Функция bytes.Clone

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

Синтаксис

gobytes.Clone(b []byte) []byte

Пример

Давайте создадим копию среза байтов с помощью bytes.Clone и убедимся, что это действительно независимая копия:

gopackage 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)
}

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

go"original: \"abcde\""
"copy: \"abcde\""

Пример

Продемонстрируем, что изменения в копии не влияют на исходный срез:

gopackage 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)
}

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

go"original: \"abcde\""
"copy: \"Xbcde\""

Пример

Если передать пустой срез, функция вернет пустой срез, а не nil:

gopackage 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)
}

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

go"original is nil: true"
"cloned is nil: false"
"cloned: \"\""

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

  • функцию bytes.Compare,
    которая сравнивает два среза байтов
  • функцию bytes.Equal,
    которая проверяет равенство двух срезов байтов
  • функцию bytes.Split,
    которая разбивает срез байтов на под-срезы по разделителю
  • функцию bytes.ReplaceAll,
    которая заменяет все вхождения под-среза на другой