Ответ
В Go строки иммутабельны, поэтому каждое сложение создает новую строку. Для эффективной конкатенации:
- strings.Builder - лучший выбор для множественных сложений:
var b strings.Builder
b.WriteString("Hello")
b.WriteString(" ")
b.WriteString("World")
result := b.String()
- bytes.Buffer - альтернатива Builder'у:
var buf bytes.Buffer
buf.WriteString("foo")
buf.WriteString("bar")
- strings.Join() - для объединения слайса строк:
parts := []string{"a", "b", "c"}
result := strings.Join(parts, "")
- Предварительное выделение памяти (если известен размер):
b := strings.Builder{}
b.Grow(100) // резервируем память
Простые операции с + подходят только для 2-3 строк, в остальных случаях Builder на 50-90% быстрее.