Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Node.js: strings.Builder, string concatenation, buffer, memory allocation, Go

Как работает strings.Builder под капотом и почему он эффективнее наивной конкатенации?

Вопрос проверяет понимание внутреннего устройства strings.Builder в Go и причин его эффективности по сравнению с конкатенацией строк.

Короткий ответ

strings.Builder использует внутренний буфер (срез байтов) для накопления данных. При вызове WriteString данные копируются в буфер, который при необходимости расширяется. Это позволяет избежать создания множества промежуточных строк, как при конкатенации через +, где каждая операция создает новую строку и копирует все данные. В результате снижается нагрузка на память и сборщик мусора.

Длинный ответ

Как работает strings.Builder

strings.Builder в Go — это структура, которая содержит внутренний срез байтов ([]byte). Когда вы вызываете метод WriteString, данные копируются в этот срез. Если срез заполнен, он автоматически расширяется (обычно удваивается), что минимизирует количество выделений памяти.

Почему это эффективнее конкатенации

При наивной конкатенации строк через оператор + каждая операция создает новую строку, копируя содержимое обеих строк. Это приводит к множественным выделениям памяти и копированиям, особенно в цикле. Например:

s := ""
for i := 0; i < 1000; i++ {
    s += "a"  // каждая итерация создает новую строку
}

Этот код создает 1000 новых строк, каждая из которых копирует все предыдущие данные. С strings.Builder:

var sb strings.Builder
for i := 0; i < 1000; i++ {
    sb.WriteString("a")
}
s := sb.String()

Здесь данные накапливаются в буфере, и только в конце создается одна строка. Это значительно снижает количество аллокаций и копирований.

Применение

strings.Builder идеален для построения больших строк, например, при формировании SQL-запросов, HTML-шаблонов или логов. Он также безопасен для конкурентного использования (если не вызывать методы из разных горутин без синхронизации).

Вывод: Используйте strings.Builder, когда нужно многократно добавлять данные к строке, особенно в циклах. Это улучшает производительность и снижает нагрузку на сборщик мусора.

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • Node.js

    Node.js

Ключевые слова

#strings.Builder

#string concatenation

#buffer

#memory allocation

#Go

Подпишись на Golang Developer в телеграм

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.