Sobes.tech
Senior

// Čo je zlé na tomto kóde? Ako ho zlepšiť? func fn() { str := "" for i := 0; i < 100000; i++ { str += fmt.Sprintf("%d", i) } fmt.Println(str) }

sobes.tech AI

Odpoveď od AI

Problém tohto kódu je, že reťazec str sa v cykle spája pomocou operátora +=. V jazyku Go sú reťazce nemenné, takže pri každej iterácii sa vytvorí nový reťazec, čo vedie k veľkému počtu alokácií a zníženiu výkonu.

Lepšie je použiť strings.Builder alebo bytes.Buffer na efektívne zhromažďovanie reťazcov:

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

Toto výrazne zníži počet alokácií a zrýchli vykonávanie kódu.