Cuando construyes una calculadora en Go, tarde o temprano alguien ingresará algo que no es un número. Saber cómo detectar y manejar ese problema es fundamental para escribir programas robustos. Aquí se explica cómo Go gestiona los errores de conversión usando Atoi, el condicional if y el valor especial nil.
¿Qué ocurre cuando Atoi recibe un valor que no es un número?
Imagina que tienes una calculadora que recibe dos operadores separados por el signo más. Si en lugar de un número válido introduces algo como dos W, la función Atoi (ASCII to Integer) intentará convertir ese string a entero, pero fallará [01:10].
- Atoi no lanza una excepción como en otros lenguajes.
- En su lugar, devuelve dos valores: el entero resultante y un posible error.
- Cuando la conversión falla, el entero devuelto es cero y el error contiene un mensaje descriptivo.
Esto significa que si no revisas ese error, tu programa seguirá ejecutándose con un valor incorrecto. En el ejemplo, el resultado de la suma aparecía como solo siete, porque el primer operador se convirtió silenciosamente en cero.
¿Cómo capturar el error que devuelve Atoi?
La clave está en recibir ambos valores que Atoi retorna. En lugar de usar el guion bajo (_) para ignorar el error, se almacena en una variable [02:05]:
go
operador1, err1 := strconv.Atoi(partes[0])
Al imprimir err1, se obtiene un mensaje como "sintaxis inválida", que indica exactamente por qué Go no pudo convertir ese string en un número. Este patrón de retorno múltiple es una característica central de Go: las funciones pueden devolver el resultado esperado junto con un error.
¿Cómo funciona el condicional if para validar errores?
El condicional if permite verificar si el error existe antes de continuar con la lógica del programa [03:15]. La estructura básica es:
go
if err1 != nil {
fmt.Println(err1)
} else {
fmt.Println(operador1)
}
¿Qué significa nil en Go?
Nil es el valor nulo en Go, equivale a decir que algo no existe [03:30]. Cuando Atoi convierte correctamente un string a entero, el error devuelto es nil, lo que indica que no hubo problema. Cuando la conversión falla, el error es distinto de nil y contiene información sobre lo que salió mal.
err1 != nil → el error sí ocurrió, hay que manejarlo.
err1 == nil → no hubo error, se puede continuar normalmente.
¿Cómo hace tu programa más robusto el manejo de errores?
Con esta validación implementada, el programa puede tomar dos caminos diferentes [04:20]:
- Si el input es inválido: se imprime el mensaje de error y se puede redirigir el flujo del programa.
- Si el input es válido: se ejecuta la operación normalmente, como el
2 + 2 que devuelve 4.
Este mismo patrón se aplica al segundo operador. Si operador2 también puede recibir datos incorrectos, se maneja de la misma forma:
go
operador2, err2 := strconv.Atoi(partes[1])
if err2 != nil {
fmt.Println(err2)
} else {
fmt.Println(operador2)
}
El concepto importante aquí es que en Go tú decides qué hacer con el error. No se oculta ni se ignora automáticamente. Este enfoque explícito obliga a pensar en los posibles fallos y a escribir código que los gestione de forma clara.
En resumen, funciones como Atoi devuelven un error junto con el resultado. Revisas si ese error es distinto de nil usando if, y según el caso ejecutas un flujo u otro. Así tu programa deja de fallar silenciosamente y se vuelve predecible y confiable. ¿Has probado a manejar errores en ambos operadores de tu calculadora? Comparte cómo lo resolviste.