«Convert string to integer type in Go?» — la pregunta que atormenta a los principiantes
\n\nCualquiera que haya empezado a programar en Go, tarde o temprano se ha topado con un muro: necesita tomar una cadena como "42" y convertirla en un número real 42. Parecería que podría ser más simple? Pero precisamente esta pregunta acumula miles de visitas en Stack Overflow, y debajo de ella — docenas de comentarios con errores típicos. ¿Por qué sucede esto?
En Go no existe el familiar int("42") de Python o JavaScript. En su lugar — un potente pero estricto paquete strconv, que te obliga a pensar en lo que podría salir mal. Y esto es correcto: no puedes simplemente «pasar» una cadena a int, porque la cadena podría estar dañada, vacía o contener espacios adicionales.
En este artículo analizaremos la conversión de cadena a número en Go con ejemplos reales, repasaremos los errores en los que incluso los desarrolladores experimentados tropiezan, y daremos plantillas de código funcionales. ¡Allá vamos!
\n\n1. La herramienta principal: el paquete strconv
\n\nEn la biblioteca estándar de Go, la conversión de cadenas está a cargo del paquete strconv. Tiene tres funciones principales para convertir una cadena en un número entero:
- \n
Atoi(s string) (int, error)— la opción más simple, convierte una cadena enint(el tamaño depende de la plataforma: 32 o 64 bits). \n ParseInt(s string, base int, bitSize int) (int64, error)— da control total: base del sistema numérico (10, 16, 2) y tamaño en bits (0, 8, 16, 32, 64). \n ParseUint(s string, base int, bitSize int) (uint64, error)— lo mismo, pero para números sin signo. \n
El error más popular es ignorar el error devuelto. Veamos a qué conduce esto.
\n\nEjemplo 1: Ignoramos el error — obtenemos un bug
\n\npackage main\n\nimport (\n "fmt"\n "strconv"\n)\n\nfunc main() {\n s := "123abc"\n num, _ := strconv.Atoi(s) // ¡Error tragado!\n fmt.Println(num) // Salida: 0 — y ni siquiera sabrás que algo salió mal\n}\n\n\nEn Go no hay excepciones, el error es un valor. Si lo ignoras (_), obtendrás el valor cero (0) y perderás horas depurando, preguntándote por qué tu programa se comporta de manera extraña. ¡Siempre maneja el error!
2. Top 5 errores al convertir string a int en Golang
\n\nAnalizamos las preguntas en Stack Overflow y destacamos los problemas más frecuentes. Aquí están:
\n\nError #1: Espacios y caracteres invisibles
\n\nLa cadena " 42 " o "42\\n" — Atoi devolverá un error. Go no tolera caracteres adicionales, a diferencia de algunos lenguajes que recortan automáticamente la cadena.
s := " 42 "\nnum, err := strconv.Atoi(s)\nif err != nil {\n fmt.Println("Error:", err) // strconv.Atoi: parsing " 42 ": invalid syntax\n}\n\n\nSolución: usa strings.TrimSpace() antes de la conversión.
import "strings"\n\ns := " 42 "\ns = strings.TrimSpace(s)\nnum, err := strconv.Atoi(s)\nif err == nil {\n fmt.Println(num) // 42\n}\n\n\nError #2: Cadena vacía
\n\nLa cadena vacía "" — también es un error. Muchos principiantes esperan que una cadena vacía se convierta en 0, pero no es así.
num, err := strconv.Atoi("")\n// err: strconv.Atoi: parsing "": invalid syntax\n\n\nSolución: verifica la longitud de la cadena o maneja el error explícitamente, asignando un valor por defecto.
\n\nError #3: Desbordamiento (overflow)
\n\nSi la cadena contiene un número que no cabe en el tipo seleccionado, Atoi o ParseInt devolverán el error ErrRange y el valor máximo/mínimo para ese tipo.
s := "99999999999999999999" // más grande que int64\nnum, err := strconv.ParseInt(s, 10, 64)\nif er