Los errores personalizados son aquellos que puede definir el usuario. Por ejemplo, si uno escribe una función que se usa para dividir dos números, que se usará en varios lugares, el usuario podría crear un error personalizado que se puede configurar cada vez que se encuentre la división por cero, ya que podría resultar fatal. a la larga.
La forma más fácil de crear errores personalizados en Golang es usar la función New() que está presente en el módulo de errores de Golang. Antes de pasar a crear nuestro propio error, echemos un vistazo a cómo se implementa en el paquete de errores .
package errors // New returns an errorString // that contains the input // text as its value. func New(text string) error { return &errorString{text} } // errorString is a trivial // implementation of error. type errorString struct { s string } func (e *errorString) Error() string { return e.s }
Entonces, básicamente, lo que hace la función New() es crear un error con un mensaje personalizado que puede ser escrito por el programador. Por ejemplo, supongamos que queremos que se muestre un error siempre que se proporcione un valor negativo como entrada para el programa que genera el área de un cuadrado, dado su lado.
package main // the errors package // contains the New function import ( "errors" "fmt" ) func main() { side := -2.0 if side < 0.0 { // control enters here if error condition is met fmt.Println(errors.New("Negative value entered!")) return } fmt.Printf("Area= %f", side*side) }
Producción:
Negative value entered!
Esto fue así porque habíamos ingresado la longitud del lado como -2, lo cual no puede ser posible, y por lo tanto se arrojó el error. Ahora probemos un programa similar pero esta vez pongamos la generación de errores en una función separada.
package main import ( "errors" "fmt" ) func findAreaSquare(side float64) (error, float64) { if side < 0.0 { // function that returns the error // as well as the computed area return errors.New("Negative value entered!"), 0 } return nil, side * side } func main() { side := -2.0 err, area := findAreaSquare(side) if err != nil { fmt.Printf("%s", err) return } fmt.Printf("Area= %f", area) }
Producción:
Negative value entered!