Sobes.tech
Senior

// Šta je loše u ovom kodu? Kako ga poboljšati? func fn() { str := "" for i := 0; i < 100000; i++ { str += fmt.Sprintf("%d", i) } fmt.Println(str) }

sobes.tech АИ

Одговор од АИ

Проблем овог кода је што се низ str конкатенира у циклусу помоћу оператора +=. У Језику Go, низови су неизменљиви, па се при свакој итерацији креира нови низ, што доводи до великог броја алокација и смањене перформансе.

Боље је користити strings.Builder или 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())
}

Ово ће знатно смањити број алокација и убрзати извршавање кода.