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())
}
Ово ће знатно смањити број алокација и убрзати извршавање кода.