Метод bytes.Buffer.Write

Метод bytes.Buffer.Write записывает переданный срез байт в буфер. В качестве первого параметра метод принимает срез байт []byte, который необходимо записать. Метод возвращает количество записанных байт и ошибку. Если запись прошла успешно, ошибка будет равна nil. В отличие от метода WriteString, этот метод работает непосредственно с байтами, что позволяет записывать в буфер бинарные данные.

Синтаксис

gobuffer.Write(p []byte) (n int, err error)

Пример

Давайте создадим буфер и запишем в него срез байт:

gopackage main

import (
  "bytes"
  "fmt"
)

func main() {
  var buf bytes.Buffer
  data := []byte("abcde")
  
  n, err := buf.Write(data)
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  
  fmt.Println("Written bytes:", n)
  fmt.Println("Buffer content:", buf.String())
}

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

go"Written bytes: 5"
"Buffer content: abcde"

Пример

Давайте запишем в буфер несколько срезов байт последовательно:

gopackage main

import (
  "bytes"
  "fmt"
)

func main() {
  var buf bytes.Buffer
  
  _, _ = buf.Write([]byte("Hello, "))
  _, _ = buf.Write([]byte("world"))
  _, _ = buf.Write([]byte("!"))
  
  fmt.Println("Result:", buf.String())
}

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

go"Result: Hello, world!"

Пример

Метод Write может использоваться для записи бинарных данных. Давайте запишем в буфер числовые значения в байтовом представлении:

gopackage main

import (
  "bytes"
  "fmt"
)

func main() {
  var buf bytes.Buffer
  numbers := []byte{1, 2, 3, 4, 5}
  
  n, err := buf.Write(numbers)
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  
  fmt.Println("Written bytes:", n)
  fmt.Println("Buffer bytes:", buf.Bytes())
  fmt.Println("Buffer length:", buf.Len())
}

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

go"Written bytes: 5"
"Buffer bytes: [1 2 3 4 5]"
"Buffer length: 5"

Пример

Метод Write всегда возвращает количество записанных байт, равное длине переданного среза, а ошибка всегда равна nil, поскольку буфер всегда может расширяться. Однако возвращаемые значения соответствуют интерфейсу io.Writer:

gopackage main

import (
  "bytes"
  "fmt"
)

func main() {
  var buf bytes.Buffer
  data := []byte("12345")
  
  n, err := buf.Write(data)
  fmt.Printf("n = %d, err = %v\n", n, err)
  
  // Добавим еще данные
  more := []byte("67890")
  n2, err2 := buf.Write(more)
  fmt.Printf("n2 = %d, err2 = %v\n", n2, err2)
  fmt.Println("Full buffer:", buf.String())
}

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

go"n = 5, err = <nil>"
"n2 = 5, err2 = <nil>"
"Full buffer: 1234567890"

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

  • метод bytes.Buffer.WriteString,
    который записывает строку в буфер
  • метод bytes.Buffer.Bytes,
    который возвращает содержимое буфера как срез байт
  • метод bytes.Buffer.String,
    который возвращает содержимое буфера как строку
  • функцию bytes.NewBuffer,
    которая создает новый буфер из среза байт