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.