Go Creazione di un tipo di errore personalizzato


Esempio

In Go, un errore è rappresentato da qualsiasi valore che può descriversi come stringa. Qualsiasi tipo che implementa l'interfaccia di error incorporata è un errore.

// The error interface is represented by a single
// Error() method, that returns a string representation of the error
type error interface {
    Error() string
}

L'esempio seguente mostra come definire un nuovo tipo di errore utilizzando una stringa composita letterale.

// Define AuthorizationError as composite literal
type AuthorizationError string

// Implement the error interface
// In this case, I simply return the underlying string
func (e AuthorizationError) Error() string {
    return string(e)
}

Ora posso usare il mio tipo di errore personalizzato come errore:

package main

import (
    "fmt"
)

// Define AuthorizationError as composite literal
type AuthorizationError string

// Implement the error interface
// In this case, I simply return the underlying string
func (e AuthorizationError) Error() string {
    return string(e)
}

func main() {
    fmt.Println(DoSomething(1)) // succeeds! returns nil
    fmt.Println(DoSomething(2)) // returns an error message
}

func DoSomething(someID int) error {
    if someID != 1 {
        return AuthorizationError("Action not allowed!")
    }

    // do something here

    // return a nil error if the execution succeeded
    return nil
}