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. Как задать направление канала?