Avatar ·

Concatenação eficiente de strings em Go: como unir strings corretamente e rapidamente

Olá a todos! Comecei a estudar Go recentemente e me deparei com um problema de desempenho ao trabalhar com strings. Preciso montar um grande relatório HTML a partir de vários fragmentos. Inicialmente, usei o operador `+`: ```go var result string for i := 0; i < 100000; i++ { result += fmt.Sprintf("
%d
", i) } ``` Esse código funciona muito lentamente e consome muita memória. Li que strings em Go são imutáveis, e cada operação `+` cria uma nova string, copiando os dados antigos. Para 100.000 iterações, isso gera uma sobrecarga enorme. Tentei usar `strings.Join`, mas ele funciona apenas com slices de strings, e preciso adicionar elementos dinamicamente em um loop. Também ouvi falar sobre `bytes.Buffer` e `strings.Builder`. Qual dessas abordagens é a mais correta e eficiente para Go? É importante para mim não apenas acelerar o código, mas também minimizar a alocação de memória e o trabalho do garbage collector. Ficarei grato por exemplos concretos com benchmarks ou pelo menos uma explicação de por que