Senior
// Was ist schlecht an diesem Code? Wie kann man ihn verbessern? func fn() { str := "" for i := 0; i < 100000; i++ { str += fmt.Sprintf("%d", i) } fmt.Println(str) }
sobes.tech KI
Antwort von AI
Das Problem dieses Codes ist, dass die Zeichenkette str in einer Schleife mit dem Operator += verkettet wird. In Go sind Strings unveränderlich, daher wird bei jeder Iteration eine neue Zeichenkette erstellt, was zu vielen Allokationen führt und die Leistung verringert.
Es ist besser, strings.Builder oder bytes.Buffer zu verwenden, um Strings effizient zu sammeln:
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())
}
Dies wird die Anzahl der Allokationen erheblich reduzieren und die Ausführung des Codes beschleunigen.