Sobes.tech
Senior

// Wat is er mis met deze code? Hoe kan het verbeterd worden? func fn() { str := "" for i := 0; i < 100000; i++ { str += fmt.Sprintf("%d", i) } fmt.Println(str) }

sobes.tech AI

Antwoord van AI

Het probleem met deze code is dat de string str wordt geconcteneerd in een lus met behulp van de operator +=. In Go zijn strings onveranderlijk, dus wordt bij elke iteratie een nieuwe string gemaakt, wat leidt tot veel allocaties en verminderde prestaties.

Het is beter om strings.Builder of bytes.Buffer te gebruiken voor efficiënte stringopbouw:

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())
}

Dit zal het aantal allocaties aanzienlijk verminderen en de uitvoering van de code versnellen.