Sobes.tech
Senior

// Quel est le problème avec ce code ? Comment l'améliorer ? func fn() { str := "" for i := 0; i < 100000; i++ { str += fmt.Sprintf("%d", i) } fmt.Println(str) }

sobes.tech IA

Réponse de l'IA

Le problème de ce code est que la chaîne str est concaténée dans une boucle à l'aide de l'opérateur +=. En Go, les chaînes sont immuables, donc à chaque itération, une nouvelle chaîne est créée, ce qui entraîne un grand nombre d'allocations et une baisse des performances.

Il est préférable d'utiliser strings.Builder ou bytes.Buffer pour accumuler efficacement les chaînes :

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

Cela réduira considérablement le nombre d'allocations et accélérera l'exécution du code.