РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
177 of 1593 menu

Тип bytes.Buffer

Тип bytes.Buffer является буфером байтов с изменяемым размером, который предоставляет методы для чтения и записи данных. Он часто используется для эффективного конкатенирования строк, так как не создает новые объекты при каждой операции, в отличие от оператора +. Буфер можно создать пустым или инициализировать начальными данными с помощью функций bytes.NewBuffer и bytes.NewBufferString.

Создание буфера

Создадим пустой буфер и буфер с начальными данными:

package main import ( "bytes" "fmt" ) func main() { // Пустой буфер var buffer1 bytes.Buffer // Буфер с начальными данными из строки buffer2 := bytes.NewBufferString("hello") // Буфер с начальными данными из среза байтов initialData := []byte("world") buffer3 := bytes.NewBuffer(initialData) fmt.Println(buffer1.String()) fmt.Println(buffer2.String()) fmt.Println(buffer3.String()) }

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

"" "hello" "world"

Метод WriteString

Метод WriteString добавляет строку в конец буфера. Он возвращает количество записанных байтов и возможную ошибку:

package main import ( "bytes" "fmt" ) func main() { var buffer bytes.Buffer n, err := buffer.WriteString("Go ") buffer.WriteString("lang") fmt.Printf("Записано байт: %d, ошибка: %v\n", n, err) fmt.Println(buffer.String()) }

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

"Записано байт: 3, ошибка: <nil>" "Go lang"

Метод Write

Метод Write добавляет в буфер срез байтов. Этот метод полезен для работы с бинарными данными:

package main import ( "bytes" "fmt" ) func main() { var buffer bytes.Buffer buffer.Write([]byte("abc")) buffer.Write([]byte("123")) fmt.Println(buffer.String()) }

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

"abc123"

Метод String

Метод String преобразует содержимое буфера в строку. Это удобно для финального получения результата накопления данных:

package main import ( "bytes" "fmt" ) func main() { var buffer bytes.Buffer for i := 0; i < 5; i++ { buffer.WriteString("a") } result := buffer.String() fmt.Println(result) }

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

"aaaaa"

Метод Bytes

Метод Bytes возвращает срез байтов, содержащий все данные буфера. Это полезно, если нужно работать с байтами напрямую:

package main import ( "bytes" "fmt" ) func main() { var buffer bytes.Buffer buffer.WriteString("hello") b := buffer.Bytes() fmt.Printf("%v\n", b) fmt.Printf("%s\n", b) }

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

"[104 101 108 108 111]" "hello"

Метод Read

Метод Read читает данные из буфера в переданный срез байтов. Он возвращает количество прочитанных байтов и ошибку io.EOF, когда буфер пуст:

package main import ( "bytes" "fmt" ) func main() { buffer := bytes.NewBufferString("abcde") data := make([]byte, 2) n, err := buffer.Read(data) fmt.Printf("Прочитано байт: %d, ошибка: %v\n", n, err) fmt.Printf("data: %s\n", data) fmt.Printf("Остаток в буфере: %s\n", buffer.String()) }

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

"Прочитано байт: 2, ошибка: <nil>" "data: ab" "Остаток в буфере: cde"

Метод Reset

Метод Reset очищает буфер, удаляя все данные и обнуляя внутреннее состояние. Это позволяет переиспользовать буфер:

package main import ( "bytes" "fmt" ) func main() { var buffer bytes.Buffer buffer.WriteString("test") fmt.Println(buffer.String()) buffer.Reset() fmt.Println("После Reset:", buffer.String()) buffer.WriteString("new data") fmt.Println("Новые данные:", buffer.String()) }

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

"test" "После Reset: " "Новые данные: new data"

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

  • функцию bytes.NewBufferString,
    которая создает буфер из строки
  • метод Buffer.WriteString,
    который записывает строку в буфер
  • метод Buffer.Bytes,
    который возвращает срез байтов буфера
  • тип strings.Builder,
    аналогичный инструмент для эффективного построения строк
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить