Senior
// Bu kodda nə səhv var? Onu necə yaxşılaşdıra bilərik? func fn() { str := "" for i := 0; i < 100000; i++ { str += fmt.Sprintf("%d", i) } fmt.Println(str) }
sobes.tech Süni İntellekt
AI-dan cavab
Bu kodun problemi odur ki, str sətiri += operatoru ilə dövrədə birləşdirilir. Go-da sətirlər dəyişdirilə bilməz, buna görə hər iterasiyada yeni sətir yaradılır, bu da çox sayda ayırma və performansın aşağı düşməsinə səbəb olur.
Effektiv sətir yığmaq üçün strings.Builder və ya bytes.Buffer istifadə etmək daha yaxşıdır:
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())
}
Bu, ayırma sayını əhəmiyyətli dərəcədə azaldacaq və kodun icrasını sürətləndirəcək.