Sobes.tech
Senior

// Kas yra blogai šiame kode? Kaip jį patobulinti? func fn() { str := "" for i := 0; i < 100000; i++ { str += fmt.Sprintf("%d", i) } fmt.Println(str) }

sobes.tech AI

Atsakymas iš AI

Šio kodo problema ta, kad eilutė str ciklo metu sujungiama naudojant operatorių +=. Go kalboje eilutės yra nekeičiamos, todėl kiekvienos iteracijos metu kuriama nauja eilutė, kas sukelia daug atminties paskirstymų ir sumažina našumą.

Efektyviam eilutės kaupimui geriau naudoti strings.Builder arba 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())
}

Tai žymiai sumažins paskirstymų skaičių ir pagreitins kodo vykdymą.