«Me rompí la cabeza una hora, y la solución está en tres líneas»: cómo convertir int a string en Go
\n\nImagine: está escribiendo un microservicio en Go, procesa IDs numéricos de usuarios y de repente se da cuenta de que necesita concatenarlos con texto en registros o respuestas HTTP. Escribe algo como str := "User_" + id — y el compilador muestra un error: cannot use id (type int) as type string in concatenation. ¿Le suena familiar?
Esta es una de las preguntas más populares en Stack Overflow sobre Go — «How to convert an int value to string in Go?» — ha sido vista cientos de miles de veces. Y con razón: en Go hay tipado estricto, y simplemente «sumar» un número con una cadena no funciona. Pero no se preocupe — hoy analizaremos todas las formas de convertir int a string en Go. Descubrirá qué método es más rápido, cuál es más seguro y cuándo usar cada uno. ¡Allá vamos!
¿Por qué Go no permite simplemente sumar int y string?
\n\nA diferencia de JavaScript o Python, donde "Age: " + 25 funciona «de fábrica», Go requiere una conversión explícita de tipos. Esto se hace por seguridad: siempre debe controlar qué se convierte y en qué. Imagine que accidentalmente suma un número con texto — en otros lenguajes esto puede provocar errores difíciles de detectar. En Go, el compilador le dirá de inmediato: «Alto, así no se puede».
Por lo tanto, para convertir int
string en Go existen funciones especiales de la biblioteca estándar. Sin dependencias externas — solo Go puro.\n\nMétodo n.º 1: fmt.Sprintf — la «navaja suiza» universal
\n\nLa forma más intuitiva es usar la función fmt.Sprintf. Seguro que ya la conoce por la salida formateada. Puede convertir cualquier cosa en una cadena — números, valores booleanos, estructuras.
package main\n\nimport "fmt"\n\nfunc main() {\n age := 25\n str := fmt.Sprintf("Age: %d", age)\n fmt.Println(str) // Salida: Age: 25\n}\n\nVentajas:
\n- \n
- Muy flexible: puede incrustar el número directamente en la cadena con el formato deseado (decimal, hexadecimal, con ceros a la izquierda). \n
- Adecuado para cualquier tipo — no solo int, sino también float, bool, struct. \n
Desventajas:
\n- \n
- Utiliza reflexión internamente, por lo que funciona más lento que las funciones especializadas. \n
- Si solo necesita obtener una cadena a partir de un número (sin formato), es redundante. \n
Cuándo usarlo: cuando no solo necesita convertir, sino también formatear la salida — agregar símbolos de moneda, alinear por ancho, convertir a HEX.
\n\nMétodo n.º 2: strconv.Itoa — rápido y simple (int → string)
\n\nSi su tarea es simplemente obtener la representación en cadena de un número, sin «adornos», use strconv.Itoa. Esta es una función especializada para convertir int a string. Funciona rápido y no realiza operaciones innecesarias.
package main\n\nimport (\n "fmt"\n "strconv"\n)\n\nfunc main() {\n number := 42\n str := strconv.Itoa(number)\n fmt.Println(str) // Salida: "42"\n fmt.Printf("Tipo: %T\\n", str) // Tipo: string\n}\n\nVentajas:
\n- \n
- Máximo rendimiento para el caso básico. \n
- Simplicidad: una función — una acción. \n
Desventajas:
\n- \n
- Solo funciona con el tipo
int. Si tieneint64,int32, etc., primero debe convertirlo ainto usar otro método. \n - Sin control sobre el sistema numérico — solo representación decimal. \n
Cuándo usarlo: cuando tiene un int normal y solo necesita obtener una cadena — esta es su opción por defecto.
Método n.º 3: strconv.FormatInt — control sobre el sistema numérico
\n\n¿Y si necesita convertir un número n