Найти тему

Конкатенация и построение строк в Go 1.10+

Статья подготовлена для студентов курса «Разработчик Golang» в образовательном проекте OTUS.

В Go 1.10 появился новый тип strings.Builder, его можно использовать для эффективной конкатенации строк. Давайте рассмотрим некоторые способы его применения, а также возможности, которые даёт реализация интерфейса io.Writer.

Официальную документацию по strings.Builder можно почитать тут.

Создание строки при помощи strings.Builder

Самый очевидный сценарий, особенно для новичков, – конкатенация нескольких строк. Например, добавление к строке всех элементов слайса без использования strings.Builder может выглядеть следующим образом:

-2

Этот код отлично подойдёт для несложных программ, но он не оптимален: при каждом вызове ret += str в памяти создаётся новая строка. Это происходит ввиду неизменяемости строк в Go: при любом изменении создаётся новая строка. Чтобы избавиться от лишних аллокаций, мы можем воспользоваться типом strings.Builder и методом WriteString:

-3

Таким же образом мы можем использовать методы WriteRune и WriteByte для добавления символов к строке:

-4

После создания строки strings.Builder позволяет «перезагрузить» его и приступить к созданию новой:

-5

string.Builder реализует io.Writer

Помимо WriteString и WriteRune, string.Builder также реализует io.Writer, что на первый взгляд не кажется интересным: зачем нам записывать слайс байт, если можно просто записать строку? Но именно благодаря реализации io.Writer мы можем использовать такие функции, как fmt.Fprintf вместе со strings.Builder, что продемонстрировано в документации:

-6

Хотя, конечно, мы можем использовать и bytes.Buffer.

Остались вопросы? Пишите их в комментариях!

Записаться в группу вы можете прямо сейчас, пройдя вступительное тестирование. Не упустите свою возможность получить экспертные знания по Golang от опытных программистов!

ЗАПИСАТЬСЯ НА КУРС