Sobes.tech
Senior

// Qual è il problema di questo codice? Come migliorarlo? func fn() { str := "" for i := 0; i < 100000; i++ { str += fmt.Sprintf("%d", i) } fmt.Println(str) }

sobes.tech AI

Risposta dell'AI

Il problema di questo codice è che la stringa str viene concatenata in un ciclo usando l'operatore +=. In Go, le stringhe sono immutabili, quindi ad ogni iterazione viene creata una nuova stringa, il che porta a molte allocazioni e a una diminuzione delle prestazioni.

È meglio usare strings.Builder o bytes.Buffer per accumulare le stringhe in modo efficiente:

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

Questo ridurrà significativamente il numero di allocazioni e accelererà l'esecuzione del codice.