Sobes.tech
Senior

// Ի՞նչ վատ է այս կոդը: Ինչպե՞ս կարելի է բարելավել: func fn() { str := "" for i := 0; i < 100000; i++ { str += fmt.Sprintf("%d", i) } fmt.Println(str) }

sobes.tech AI

Պատասխան AI-ից

Այս կոդի խնդիրն այն է, որ 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())
}

Այս կերպ զգալիորեն կրճատվում է ալոկացիաների քանակը և արագանում է կոդի գործարկումը։