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

Тип strings.Builder

Тип strings.Builder используется для эффективного построения строк путем добавления фрагментов. В отличие от конкатенации с помощью оператора +, которая создает новую строку при каждом объединении, Builder накапливает данные во внутреннем буфере и преобразует их в строку только один раз - при вызове метода String. Основные методы типа - это WriteString для добавления строки и String для получения итоговой строки.

Создание и базовое использование

package main import ( "fmt" "strings" ) func main() { var builder strings.Builder builder.WriteString("Hello, ") builder.WriteString("World!") res := builder.String() fmt.Println(res) }

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

"Hello, World!"

Метод WriteString

Метод WriteString добавляет переданную строку в буфер strings.Builder. Он возвращает количество добавленных байтов и возможную ошибку (всегда nil при работе со строкой). Рассмотрим пример накопления нескольких строк:

package main import ( "fmt" "strings" ) func main() { var builder strings.Builder for i := 0; i < 3; i++ { builder.WriteString("line ") } res := builder.String() fmt.Println(res) }

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

"line line line "

Метод String

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

package main import ( "fmt" "strings" ) func main() { var builder strings.Builder builder.WriteString("first") res1 := builder.String() builder.WriteString("second") res2 := builder.String() fmt.Println(res1, res2) }

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

"first" "firstsecond"

Предварительное выделение памяти

Для повышения производительности можно предварительно выделить память под будущую строку с помощью метода Grow. Это позволяет избежать многократного перераспределения памяти при добавлении большого количества фрагментов. Рассмотрим пример:

package main import ( "fmt" "strings" ) func main() { var builder strings.Builder builder.Grow(20) // выделяем место под 20 байт builder.WriteString("hello") builder.WriteString("world") res := builder.String() fmt.Println(res) }

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

"helloworld"

Сброс буфера

Метод Reset очищает внутренний буфер strings.Builder, делая его пустым и готовым к повторному использованию:

package main import ( "fmt" "strings" ) func main() { var builder strings.Builder builder.WriteString("old") builder.Reset() builder.WriteString("new") res := builder.String() fmt.Println(res) }

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

"new"

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

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