š„ Errores en funciones
Go no soporta excepciones, por lo que las funciones retornan errores cuando sucede algo inesperado. Por convención, los errores siempre se envĆan como el Ćŗltimo valor de la lista de valores retornados por una función.
Supongamos que deseamos habilitar un filtro para vender cervezas. Se puede vender cualquier cantidad, pero solo a personas que tengan 18 aƱos o mas.
Creamos nuestra función.
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
}
La función venderCerveza recibe dos parÔmetros, la edad de quien intenta comprar la cerveza, y la cantidad de cervezas que se le venden. Retorna 2 posibles valores, la cantidad de cervezas vendidas y un posible error.
venderCerveza(edad int, cantidad int) (int, error)
Comprobamos si la edad es menor a 18 aƱos.
edad < 18
Si es asà generamos no venderemos ninguna cerveza y retornaremos un error (ese también es el orden de los valores retornados).
err := fmt.Errorf("No se puede vender cerveza a menores")
return 0, err
Si por el contrario el usuario no es menor de 18 aƱos, la cantidad de cervezas vendidas es el numero solicitado y el error es nil
.
return cantidad, nil
Para poder utilizar esta función necesitamos 2 variables, la cantidad a solicitar y un posible contenedor de errores.
var cantidad int
var err error
Primero verificamos si una persona de 15 aƱos puede comprar 6 cervezas.
cantidad, err = venderCerveza(15, 6)
if err != nil {
fmt.Println(err)
} else {
fmt.Println("Se vendieron", cantidad, "cervezas")
}
El resultado sera no satisfactorio, ya que los menores no son autorizados para comprar.
No se puede vender cerveza a menores
DespuƩs verificamos una persona de 21 aƱos puede comprar 24 cervezas.
cantidad, err = venderCerveza(21, 24)
if err != nil {
fmt.Println(err)
} else {
fmt.Println("Se vendieron", cantidad, "cervezas")
}
El resultado sera satisfactorio, ya que una persona de 21 aƱos es mayor de edad.
Se vendieron 24 cervezas