Sobes.tech
Senior

// Co je špatně s tímto kódem? Jak ho zlepšit? func fn() { str := "" for i := 0; i < 100000; i++ { str += fmt.Sprintf("%d", i) } fmt.Println(str) }

sobes.tech AI

Odpověď od AI

Problém tohoto kódu je, že řetězec str je v cyklu spojován pomocí operátoru +=. V jazyce Go jsou řetězce neměnné, takže při každé iteraci je vytvářen nový řetězec, což vede k velkému počtu alokací a snížení výkonu.

Lepší je použít strings.Builder nebo bytes.Buffer pro efektivní shromažďování řetězců:

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ýrazně sníží počet alokací a urychlí běh kódu.