Функция bytes.Cut

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

Синтаксис

gobefore, after, found := bytes.Cut(s, sep)

Пример

Давайте разделим строку "a,b,c" по первому вхождению запятой:

gopackage main

import (
  "bytes"
  "fmt"
)

func main() {
  s := []byte("a,b,c")
  sep := []byte(",")

  before, after, found := bytes.Cut(s, sep)

  fmt.Printf("before: %q, after: %q, found: %t\n", before, after, found)
}

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

go"before: \"a\", after: \"b,c\", found: true"

Пример

Если разделитель не найден, функция возвращает исходный срез в качестве первой части, пустой срез в качестве второй части и false:

gopackage main

import (
  "bytes"
  "fmt"
)

func main() {
  s := []byte("abcde")
  sep := []byte("xyz")

  before, after, found := bytes.Cut(s, sep)

  fmt.Printf("before: %q, after: %q, found: %t\n", before, after, found)
}

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

go"before: \"abcde\", after: \"\", found: false"

Пример

Функция учитывает только первое вхождение разделителя. Все последующие вхождения остаются во второй части:

gopackage main

import (
  "bytes"
  "fmt"
)

func main() {
  s := []byte("one:two:three:four")
  sep := []byte(":")

  before, after, found := bytes.Cut(s, sep)

  fmt.Printf("before: %q, after: %q, found: %t\n", before, after, found)
}

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

go"before: \"one\", after: \"two:three:four\", found: true"

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

  • функцию strings.Cut,
    которая выполняет аналогичное разделение для строк
  • функцию strings.CutPrefix,
    которая удаляет префикс из строки
  • функцию strings.CutSuffix,
    которая удаляет суффикс из строки
  • функцию bytes.Split,
    которая разделяет байтовый срез по всем вхождениям разделителя