Конкатенация строк — что происходит?

Junior
824 просмотров
AFK Offer AI

Строки в Go иммутабельны. При конкатенации через + создаётся новая строка, данные копируются:

s := "hello" + " " + "world" // 2 аллокации

Для множественной конкатенации это очень дорого — O(n²) по памяти:

// Плохо — каждая итерация создаёт новую строку
var s string
for i := 0; i < 10000; i++ {
    s += "x" // O(n²)
}

Правильные способы:

// strings.Builder — O(n), удваивает буфер
var b strings.Builder
for i := 0; i < 10000; i++ {
    b.WriteString("x")
}
result := b.String()

// strings.Join для слайсов result := strings.Join(parts, ", ")

strings.Builder использует []byte внутри и конвертирует в string без копирования.

Следующий вопрос

Что такое delve дебаггер?