🔥 ERRORES EN FUNCIONES

Manejo de errores en funciones en Go

En el lenguaje Go, el manejo explícito de errores en Go es una característica fundamental, ya que no existe un sistema de excepciones como en otros lenguajes. Por convención, cómo manejar errores en funciones de Go implica que las funciones devuelvan un valor de error como último elemento en la lista de retornos.

Imagina que queremos implementar un filtro para vender cervezas, permitiendo la venta solo a personas mayores de 18 años, sin límite en la cantidad. Veamos cómo se puede lograr esto siguiendo ejemplos prácticos de manejo de errores en Go.

func venderCerveza(edad int, cantidad int) (int, error) {
    if edad < 18 {
        err := fmt.Errorf("No se puede vender cerveza a menores")
        return 0, err
    }
    return cantidad, nil
}

En este ejemplo, la función venderCerveza recibe la edad del comprador y la cantidad de cervezas solicitadas. Retorna dos valores: la cantidad vendida y un posible error. Así, retornar errores como valores desde funciones en Go permite controlar el flujo del programa de manera clara y segura.

Cuando la edad es menor a 18 años, la función retorna cero y un error descriptivo:

err := fmt.Errorf("No se puede vender cerveza a menores")
return 0, err

Si la edad es igual o mayor a 18, se retorna la cantidad solicitada y un error nulo (nil):

return cantidad, nil

Para utilizar esta función correctamente, se suelen declarar dos variables: una para la cantidad y otra para el error:

var cantidad int
var err error

Probemos primero con una persona de 15 años que intenta comprar 6 cervezas:

cantidad, err = venderCerveza(15, 6)
if err != nil {
    fmt.Println(err)
} else {
    fmt.Println("Se vendieron", cantidad, "cervezas")
}

El resultado será un mensaje de error, ya que no se permite la venta a menores:

No se puede vender cerveza a menores

Ahora, probemos con una persona de 21 años que solicita 24 cervezas:

cantidad, err = venderCerveza(21, 24)
if err != nil {
    fmt.Println(err)
} else {
    fmt.Println("Se vendieron", cantidad, "cervezas")
}

En este caso, la venta se realiza con éxito:

Se vendieron 24 cervezas

Además, el manejo de errores en Go con defer, panic y recover permite implementar estrategias avanzadas para situaciones más complejas, aunque en la mayoría de los casos el retorno explícito de errores es suficiente para un control robusto.


Conclusión

El manejo de errores en funciones de Go es directo y transparente, permitiendo escribir código seguro y fácil de mantener. Adoptar estas prácticas facilita la detección y gestión de situaciones inesperadas, mejorando la calidad de los programas desarrollados en este lenguaje.


Cuestionario de repaso

  1. ¿Por qué Go no utiliza excepciones para el manejo de errores?
  2. ¿Cuál es la convención para retornar errores en funciones de Go?
  3. ¿Qué sucede si la edad es menor a 18 en el ejemplo de venderCerveza?
  4. ¿Qué valor retorna la función cuando la venta es exitosa?
  5. ¿Qué otras técnicas, además del retorno explícito, existen para el manejo de errores en Go?