diff --git a/README.md b/README.md
index ba566e5..e231484 100644
--- a/README.md
+++ b/README.md
@@ -51,7 +51,7 @@
- coming soon
6. [Вопросы по языку Golang](docs/GOLANG.md)
- [Что из себя представляет тип данных string в языке Golang? Можно ли изменить определенный символ в строке? Что происходит при склеивании строк?](docs/GOLANG.md#1)
- - Вытекающий вопрос — как эффективно склеивать множество строк?
+ - [Вытекающий вопрос — как эффективно склеивать множество строк?](docs/GOLANG.md#2)
- Что будет происходить при конкурентной записи в map? Как можно решить эту проблему?
- Расскажите о ООП в Golang.
- В чем различия goroutine от потока системы?
diff --git a/docs/GOLANG.md b/docs/GOLANG.md
index ca8087b..7c0297f 100644
--- a/docs/GOLANG.md
+++ b/docs/GOLANG.md
@@ -2,7 +2,21 @@
### 1. Что из себя представляет тип данных string в языке Golang? Можно ли изменить определенный символ в строке? Что происходит при склеивании строк?
-Строка Go - это байтовый срез, предназначенный только для чтения, который может содержать байты любого типа и иметь произвольную длину. Строка неизменяемая и изменить определенный символ в конкретной строке нельзя. Создается новая строка (в простейшем случае).
+Строка Go - это байтовый срез, предназначенный только для чтения, который может содержать байты любого типа и иметь произвольную длину. Строка неизменяемая и изменить определенный символ в конкретной строке нельзя. Создается новая строка (в простейшем случае).
+
+### 2. Вытекающий вопрос — как эффективно склеивать множество строк?
+
+Например, чтобы избавиться от лишних аллокаций, можно воспользоваться типом strings.Builder и методом WriteString:
+```go
+ func join(strs ...string) string {
+ var sb strings.Builder
+ for _, str := range strs {
+ sb.WriteString(str)
+ }
+ return sb.String()
+ }
+ ```
+ И никто не мешает пользоваться пакетом strings.
### 8. Как задать направление канала?