Метод bytes.Buffer.Write
Метод bytes.Buffer.Write записывает переданный срез байт в буфер.
В качестве первого параметра метод принимает срез байт []byte, который
необходимо записать. Метод возвращает количество записанных байт и ошибку.
Если запись прошла успешно, ошибка будет равна nil. В отличие от
метода WriteString, этот метод работает непосредственно с байтами,
что позволяет записывать в буфер бинарные данные.
Синтаксис
buffer.Write(p []byte) (n int, err error)
Пример
Давайте создадим буфер и запишем в него срез байт:
package 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())
}
Результат выполнения кода:
"Written bytes: 5"
"Buffer content: abcde"
Пример
Давайте запишем в буфер несколько срезов байт последовательно:
package 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())
}
Результат выполнения кода:
"Result: Hello, world!"
Пример
Метод Write может использоваться для записи бинарных данных.
Давайте запишем в буфер числовые значения в байтовом представлении:
package 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())
}
Результат выполнения кода:
"Written bytes: 5"
"Buffer bytes: [1 2 3 4 5]"
"Buffer length: 5"
Пример
Метод Write всегда возвращает количество записанных байт,
равное длине переданного среза, а ошибка всегда равна nil,
поскольку буфер всегда может расширяться. Однако возвращаемые
значения соответствуют интерфейсу io.Writer:
package 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())
}
Результат выполнения кода:
"n = 5, err = <nil>"
"n2 = 5, err2 = <nil>"
"Full buffer: 1234567890"
Смотрите также
-
метод
bytes.Buffer.WriteString,
который записывает строку в буфер -
метод
bytes.Buffer.Bytes,
который возвращает содержимое буфера как срез байт -
метод
bytes.Buffer.String,
который возвращает содержимое буфера как строку -
функцию
bytes.NewBuffer,
которая создает новый буфер из среза байт