strings.Builder
Construya cadenas de forma eficiente
strings.Builder es una lección gratuita de Go Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Go Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Go Academy incluye 4 lecciones en total.
El coste de concatenar con +
Como los strings son inmutables, cada s = s + part crea un string completamente nuevo y vuelve a copiar todos los bytes.
En un bucle, esto se vuelve lento y desperdicia memoria.
package main
import "fmt"
func main() {
s := ""
for i := 0; i < 3; i++ {
s = s + "go "
}
fmt.Println(s)
}Conozca strings.Builder
strings.Builder amplía un búfer interno y evita las copias repetidas. Escriba en él y lea el resultado una sola vez al final.
Declárelo con var b strings.Builder.
package main
import (
"fmt"
"strings"
)
func main() {
var b strings.Builder
b.WriteString("Hello")
fmt.Println(b.String())
}WriteString en un bucle
La verdadera mejora se aprecia en los bucles. Llame repetidamente a WriteString y lea el resultado una sola vez con String().
package main
import (
"fmt"
"strings"
)
func main() {
var b strings.Builder
for i := 0; i < 3; i++ {
b.WriteString("go ")
}
fmt.Println(b.String())
}Escribir bytes y runes
Un Builder acepta más que strings completos:
WriteByteañade un único byte.WriteRuneañade un punto de código Unicode.
package main
import (
"fmt"
"strings"
)
func main() {
var b strings.Builder
b.WriteString("Go")
b.WriteByte('!')
b.WriteRune('語')
fmt.Println(b.String())
}Builder implementa io.Writer
Como Builder satisface la interfaz io.Writer, puede usarlo con fmt.Fprintf para aplicar formato directamente en el búfer.
package main
import (
"fmt"
"strings"
)
func main() {
var b strings.Builder
fmt.Fprintf(&b, "x=%d y=%d", 3, 4)
fmt.Println(b.String())
}Controlar la longitud
b.Len() le indica cuántos bytes se han escrito hasta el momento, sin construir el string final.
package main
import (
"fmt"
"strings"
)
func main() {
var b strings.Builder
b.WriteString("hello")
fmt.Println(b.Len())
}Preasignar con Grow
Si sabe aproximadamente cuál será el tamaño del resultado, llame primero a b.Grow(n). Esto reserva capacidad y evita redimensionar el búfer repetidamente.
package main
import (
"fmt"
"strings"
)
func main() {
var b strings.Builder
b.Grow(64)
for i := 0; i < 5; i++ {
b.WriteString("item ")
}
fmt.Println(b.String())
}Restablecer un Builder
b.Reset() vacía el búfer para que pueda reutilizar el mismo Builder para el siguiente string.
package main
import (
"fmt"
"strings"
)
func main() {
var b strings.Builder
b.WriteString("first")
b.Reset()
b.WriteString("second")
fmt.Println(b.String())
}No copie un Builder
Un strings.Builder no debe copiarse después de su primer uso. Páselo usando un puntero (*strings.Builder).
package main
import (
"fmt"
"strings"
)
func add(b *strings.Builder, word string) {
b.WriteString(word)
}
func main() {
var b strings.Builder
add(&b, "shared ")
add(&b, "builder")
fmt.Println(b.String())
}Construir una línea CSV
Un ejemplo práctico: ensamble eficientemente una línea separada por comas con un Builder.
package main
import (
"fmt"
"strings"
)
func main() {
fields := []string{"id", "name", "age"}
var b strings.Builder
for i, f := range fields {
if i > 0 {
b.WriteByte(',')
}
b.WriteString(f)
}
fmt.Println(b.String())
}Cuándo usar un Builder
Use strings.Builder cuando concatene muchas partes, especialmente dentro de bucles.
Para unir una slice conocida una sola vez, strings.Join es más sencillo e igual de rápido.
package main
import (
"fmt"
"strings"
)
func main() {
var b strings.Builder
for i := 1; i <= 3; i++ {
fmt.Fprintf(&b, "[%d]", i)
}
fmt.Println(b.String())
}Comprobación rápida
¿Por qué es preferible un Builder a repetir + en un bucle?
Repaso: strings.Builder
Ha aprendido a construir strings de forma eficiente:
- Declárelo con
var b strings.Builder. - Añada contenido mediante
WriteString,WriteByte,WriteRuneofmt.Fprintf. - Si lo desea, use
Growde antemano, lea el resultado una sola vez conString()y no lo copie nunca.
package main
import (
"fmt"
"strings"
)
func main() {
var b strings.Builder
b.Grow(16)
b.WriteString("Go ")
b.WriteString("builder!")
fmt.Println(b.String())
}Preguntas frecuentes
¿La lección «strings.Builder» es gratis?
Sí — el texto completo de «strings.Builder» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Go Academy, actualiza a CoddyKit PRO. El curso de Go Academy incluye 4 lecciones en total.
¿Qué aprenderé en «strings.Builder»?
Construya cadenas de forma eficiente Practicas Go Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Go Academy?
No se requiere experiencia previa. Go Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «strings.Builder»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Go Academy?
Sí. Cada lección de Go Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.