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ą.