Sobes.tech
Senior

// Какво е лошото в този код? Как да го подобрим? func fn() { str := "" for i := 0; i < 100000; i++ { str += fmt.Sprintf("%d", i) } fmt.Println(str) }

sobes.tech AI

Отговор от 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())
}

Това значително ще намали броя на алокациите и ще ускори изпълнението на кода.