Sobes.tech
Senior

// Mis on halb selle koodi juures? Kuidas seda parandada? func fn() { str := "" for i := 0; i < 100000; i++ { str += fmt.Sprintf("%d", i) } fmt.Println(str) }

sobes.tech AI

Vastus AI-lt

Probleem selle koodi puhul on see, et string str ühendatakse tsüklis += operaatoriga. Go keeles on stringid muutumatud, seega iga iteratsiooni jooksul luuakse uus string, mis põhjustab palju mälu eraldusi ja vähendab jõudlust.

Tõhusamaks stringide kogumiseks on parem kasutada strings.Builder või 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())
}

See vähendab oluliselt eraldatavate mäluosade arvu ja kiirendab koodi täitmist.