0Pricing
Go Academy · Lección

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:

  • WriteByte añade un único byte.
  • WriteRune añ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, WriteRune o fmt.Fprintf.
  • Si lo desea, use Grow de antemano, lea el resultado una sola vez con String() 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.

Todas las lecciones de este curso

  1. Runas frente a bytes
  2. Funciones del paquete strings
  3. strings.Builder
  4. Unicode y utf8
← Volver a Go Academy