Помимо встроенного оператора +, в Go есть много других способов для конкатенации строк. Далее будет дана простая инструкция для конкатенации, или слияния строк с помощью пакета bytes и встроенной функции copy.
Как конкатенировать строки в Golang?
1. Создайте файл concat_buffer.go со следующим содержимым:
Рекомендуем вам супер TELEGRAM канал по Golang где собраны все материалы для качественного изучения языка. Удивите всех своими знаниями на собеседовании! 😎
Мы публикуем в паблике ВК и Telegram качественные обучающие материалы для быстрого изучения Go. Подпишитесь на нас в ВК и в Telegram. Поддержите сообщество Go программистов.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
package main import ( "bytes" "fmt" ) func main() { strings := []string{"This ", "is ", "even ", "more ", "performant "} buffer := bytes.Buffer{} for _, val := range strings { buffer.WriteString(val) } fmt.Println(buffer.String()) } |
2. Запустите код через go run concat_buffer.go;
3. Посмотрите на вывод в терминале:

4. Создайте файл concat_copy.go со следующим содержимым:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
package main import ( "fmt" ) func main() { strings := []string{"This ", "is ", "even ", "more ", "performant "} bs := make([]byte, 100) bl := 0 for _, val := range strings { bl += copy(bs[bl:], []byte(val)) } fmt.Println(string(bs[:])) } |
5. Запустите код через go run concat_copy.go;
6. Посмотрите на результат в терминале:

Код слияния строк в Golang
В шагах 1-3 описывается использование Buffer из пакета bytes в качестве отличного (в плане производительности) решения конкатенации строк. Структура Buffer имплементирует метод WriteString, что может использоваться для эффективной конкатенации строк в базовый байтовый срез.
Нет нужды использовать данное решение во всех случаях. Просто помните о нем, когда программа должна конкатенировать крупное число строк. К примеру, экспорт содержимого большого CSV-файла и прочих.
Встроенная функция copy из шагов 4-6 может использоваться для конкатенации string. Данный метод требует некоторых предположений касательно длины финальной строки, он также может использоваться на ходу. Однако, если вместимость буфера места написания результата меньше уже написанной части и добавленной строки, буфер требуется расширить. Это обычно делается через выделение нового среза с большей вместимостью.
Сравнение способов конкатенации в Golang
Сравним несколько способов конкатенации строк в Golang. Это использование оператора +, bytes.Buffer и встроенной функции copy.
1. Создайте папку bench и файл bench_test.go внутри со следующем содержимым:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
package main import ( "bytes" "testing" ) const testString = "test" func BenchmarkConcat(b *testing.B) { var str string b.ResetTimer() for n := 0; n < b.N; n++ { str += testString } b.StopTimer() } func BenchmarkBuffer(b *testing.B) { var buffer bytes.Buffer b.ResetTimer() for n := 0; n < b.N; n++ { buffer.WriteString(testString) } b.StopTimer() } func BenchmarkCopy(b *testing.B) { bs := make([]byte, b.N) bl := 0 b.ResetTimer() for n := 0; n < b.N; n++ { bl += copy(bs[bl:], testString) } b.StopTimer() } |
2. Посмотрите на результаты в терминале:


Администрирую данный сайт с целью распространения как можно большего объема обучающего материала для языка программирования Go. В IT с 2008 года, с тех пор изучаю и применяю интересующие меня технологии. Проявляю огромный интерес к машинному обучению и анализу данных.
E-mail: vasile.buldumac@ati.utm.md
Образование
Технический Университет Молдовы (utm.md), Факультет Вычислительной Техники, Информатики и Микроэлектроники
- 2014 — 2018 Universitatea Tehnică a Moldovei, ИТ-Инженер. Тема дипломной работы «Автоматизация покупки и продажи криптовалюты используя технический анализ»
- 2018 — 2020 Universitatea Tehnică a Moldovei, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»