Как эффективно объединять строки в Go?

В Go строка является примитивным типом. Это означает, что она доступна только для чтения, и любая манипуляция с ней создаст новую строку.

Мне нужно много раз объединять строки, не зная длины результирующей строки, какой самый лучший способ сделать это?

Наивный способ был бы таким:

var s string
for i := 0; i < 1000; i++ {
    s += getShortStringFromSomewhere()
}

Ответы (1 шт):

Автор решения: чистов_n

Можно сделать с помощью bytes.Buffer.

  1. Просто создать пустой буффер...

  2. ...и добавлять в него строки.

Вот код:

package main

import (
    "bytes"
)

func main() {
    buf := bytes.NewBufferString("") // (1)

    for i := 0; i < 1000; i++ {
        _, err := buf.WriteString(getShortStringFromSomewhere()) // (2)
        if err != nil {
            panic(err)
        }
    }
}
→ Ссылка