Sobes.tech
Senior

// Kas ir nepareizi ar slikti šio kodo? Kaip jį galima patobulinti? func fn() { str := "" for i := 0; i < 100000; i++ { str += fmt.Sprintf("%d", i) } fmt.Println(str) }

sobes.tech AI

Atbilde no AI

Šī koda problēma ir tā, ka virkni str cikla laikā savieno ar operatoru +=. Go valodā virknes ir nemainīgas, tāpēc katrā iterācijā tiek izveidota jauna virkne, kas noved pie daudzām atmiņas piešķiršanām un samazina veiktspēju.

Efektīvai virkņu krāšanai ir labāk izmantot strings.Builder vai 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())
}

Tas ievērojami samazinās piešķirto atmiņas vietu skaitu un paātrinās koda izpildi.