Sobes.tech
Senior

// Co jest złego w tym kodzie? Jak go ulepszyć? func fn() { str := "" for i := 0; i < 100000; i++ { str += fmt.Sprintf("%d", i) } fmt.Println(str) }

sobes.tech AI

Odpowiedź od AI

Problem tego kodu polega na tym, że łańcuch str jest konkatenowany w pętli za pomocą operatora +=. W Go łańcuchy są niezmiennicze, więc przy każdej iteracji tworzony jest nowy łańcuch, co prowadzi do dużej liczby alokacji i obniża wydajność.

Lepszym rozwiązaniem jest użycie strings.Builder lub bytes.Buffer do efektywnego gromadzenia łańcuchów:

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

To znacznie zmniejszy liczbę alokacji i przyspieszy wykonanie kodu.