Статья подготовлена для студентов курса «Разработчик Golang» в образовательном проекте OTUS.
В Go 1.10 появился новый тип strings.Builder, его можно использовать для эффективной конкатенации строк. Давайте рассмотрим некоторые способы его применения, а также возможности, которые даёт реализация интерфейса io.Writer.
Официальную документацию по strings.Builder можно почитать тут.
Создание строки при помощи strings.Builder
Самый очевидный сценарий, особенно для новичков, – конкатенация нескольких строк. Например, добавление к строке всех элементов слайса без использования strings.Builder может выглядеть следующим образом:
Этот код отлично подойдёт для несложных программ, но он не оптимален: при каждом вызове ret += str в памяти создаётся новая строка. Это происходит ввиду неизменяемости строк в Go: при любом изменении создаётся новая строка. Чтобы избавиться от лишних аллокаций, мы можем воспользоваться типом strings.Builder и методом WriteString:
Таким же образом мы можем использовать методы WriteRune и WriteByte для добавления символов к строке:
После создания строки strings.Builder позволяет «перезагрузить» его и приступить к созданию новой:
string.Builder реализует io.Writer
Помимо WriteString и WriteRune, string.Builder также реализует io.Writer, что на первый взгляд не кажется интересным: зачем нам записывать слайс байт, если можно просто записать строку? Но именно благодаря реализации io.Writer мы можем использовать такие функции, как fmt.Fprintf вместе со strings.Builder, что продемонстрировано в документации:
Хотя, конечно, мы можем использовать и bytes.Buffer.
Остались вопросы? Пишите их в комментариях!
Записаться в группу вы можете прямо сейчас, пройдя вступительное тестирование. Не упустите свою возможность получить экспертные знания по Golang от опытных программистов!
ЗАПИСАТЬСЯ НА КУРС