Sobes.tech
Назад к вопросам
Senior
6

// чем плох этот код? как его улучшить? func fn() { str := "" for i := 0; i < 100000; i++ { str += fmt.Sprintf("%d", i) } fmt.Println(str) }

Компании, где спрашивали
Холодильник.руХолодильник.ру

Ответ от нейросети

sobes.tech AI

Проблема этого кода в том, что строка str конкатенируется в цикле с помощью оператора +=. В Go строки неизменяемы, поэтому при каждой итерации создаётся новая строка, что приводит к большому количеству аллокаций и снижению производительности.

Лучше использовать strings.Builder или bytes.Buffer для эффективного накопления строк:

import (
    "fmt"
    "strings"
)

func fn() {
    var builder strings.Builder
    for i := 0; i < 100000; i++ {
        builder.WriteString(fmt.Sprintf("%d", i))
    }
    fmt.Println(builder.String())
}

Это значительно уменьшит количество аллокаций и ускорит выполнение кода.