Sobes.tech
Senior

// Mi a baj ezzel a kóddal? Hogyan lehetne javítani? func fn() { str := "" for i := 0; i < 100000; i++ { str += fmt.Sprintf("%d", i) } fmt.Println(str) }

sobes.tech MI

Válasz az MI-től

A kód problémája, hogy a str szöveg a ciklusban az += operátorral van összefűzve. Go-ban a szövegek nem módosíthatók, ezért minden iterációban új szöveg jön létre, ami sok allokációhoz és teljesítménycsökkenéshez vezet.

Hatékony szöveggyűjtéshez jobb a strings.Builder vagy a bytes.Buffer használata:

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())
}

Ez jelentősen csökkenti az allokációk számát és gyorsítja a kód futását.