Formateo de cadenas en Go sin imprimir: guía completa

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción: ¿Por qué formatear una cadena si no necesitas imprimirla?



¿Alguna vez te has encontrado en una situación en la que necesitas construir una cadena a partir de varias partes, insertar variables, agregar sangrías, pero sin mostrar el resultado en pantalla? Parece que todos los ejemplos en los tutoriales de Go terminan con la llamada a fmt.Println, pero ¿qué hacer si la cadena es necesaria para enviarla por la red, escribirla en un archivo o pasarla a otra función?



Esta pregunta atormenta a miles de desarrolladores, y con razón: en Stack Overflow ha acumulado decenas de miles de visitas. En este artículo analizaremos cómo formatear cadenas en Go sin imprimir, utilizando ejemplos de código reales. Conocerás la poderosa herramienta fmt.Sprintf, los enfoques modernos con strings.Builder y el de bajo nivel bytes.Buffer. ¡Allá vamos!



El problema: Printf imprime, pero yo necesito guardar



En Go existe la maravillosa función fmt.Printf, que formatea una cadena y la imprime inmediatamente en el flujo de salida estándar. Pero, ¿qué pasa si quieres obtener la cadena formateada como un valor, no como un efecto secundario? Por ejemplo:



name := "Alicia"age := 30// Quiero obtener la cadena "Me llamo Alicia, tengo 30 años"// pero no imprimirla de inmediato


Los desarrolladores principiantes a menudo escriben así:



fmt.Printf("Me llamo %s, tengo %d años", name, age)// ¡La cadena se ha impreso, pero la hemos perdido!


Esto funciona, pero el resultado se va a la consola. Y nosotros necesitamos guardarlo en una variable para procesarlo más adelante. La solución existe, y es elegante.



Solución n.º 1: fmt.Sprintf — el rey del formateo



En el paquete fmt hay una función gemela de Printf llamada Sprintf. La letra "S" al principio significa "String": devuelve una cadena, no la imprime. Esta es la forma más directa y comprensible de formatear cadenas en Go sin imprimir.



Ejemplo básico con Sprintf



package main

import ( "fmt")

func main() { name := "Bob" age := 25 score := 98.5

// Formateamos sin imprimir message := fmt.Sprintf("¡Hola, %s! Tienes %d años. Tu resultado: %.1f puntos.", name, age, score)

// Ahora message contiene la cadena formateada fmt.Println(message) // Imprimimos solo ahora}


Salida:

¡Hola, Bob! Tienes 25 años. Tu resultado: 98.5 puntos.


Observa: Sprintf utiliza los mismos marcadores de posición ( %s, %d, %f ) que Printf. La única diferencia es que el resultado se devuelve, no se muestra.



Marcadores de posición avanzados



Puedes usar todas las capacidades de formateo de Go:



package main

import "fmt"

func main() { // Alineación por ancho leftAligned := fmt.Sprintf("%-10s %d", "Producto", 10) rightAligned := fmt.Sprintf("%10s %d", "Producto", 10)

// Formateo de números price := 1234.5678 formattedPrice := fmt.Sprintf("Precio: $%.2f (con IVA: $%.2f)", price, price*1.2)

// Salida hexadecimal hexValue := fmt.Sprintf("Hex: %x, Dec: %d", 255, 255)

fmt.Println(leftAligned) fmt.Println(rightAligned) fmt.Println(formattedPrice) fmt.Println(hexValue)}


Salida:

Producto   10  Producto 10Precio: $1234.57 (con IVA: $1481.48)Hex: ff, Dec: 255


fmt.Sprintf es tu herramienta universal para el formateo de cadenas en Go. Funciona rápido, es comprensible y cubre el 90% de las tareas.



Solución n.º 2: strings.Builder — para construcciones complejas



¿Qué pasa si necesitas construir una cadena a partir de muchas partes, añadiéndolas una por una? Por ejemplo, generar HTML, JSON o una consulta SQL. Usar Sprintf para cada parte no es eficiente: estarías co

Blogs

Book Recommendations