Dans Golang, il existe plusieurs approches idiomatiques pour gérer les erreurs.
Les auteurs déclarent souvent des variables d'erreur fixes en suivant la convention de dénomination Err.... Pour exemple :
var ( ErrSomethingBad = errors.New("some string") ErrKindFoo = errors.New("foo happened") )
Déclarer les types d'erreurs (...Erreur) avec des informations spécifiques utiles aux appelants est une autre pratique courante.
type SomeError struct { // extra information, whatever might be useful to callers // (or for making a nice message in `Error()`) ExtraInfo int } type OtherError string func (e SomeError) Error() string { /* … */ } func (e OtherError) Error() string { return fmt.Sprintf("failure doing something with %q", string(e)) }
Erreurs ad hoc
Si vous ne vous attendez pas à ce que les utilisateurs aient besoin de tester des erreurs spécifiques, vous pouvez créez des erreurs ad hoc à l'aide d'erreurs.Nouveau.
func SomepackageFunction() error { return errors.New("not implemented") }
Utilisation des erreurs de package standard
Vous pouvez utiliser des erreurs définies dans des packages standard comme io.EOF. Cependant, il est généralement préférable de créer des erreurs personnalisées pour votre propre package.
func SomeFunc() error { return io.EOF }
Interfaces d'erreur
La création d'une interface d'erreur vous permet de vérifier des comportements ou des types spécifiques.
type Error interface { error Timeout() bool // Is the error a timeout? Temporary() bool // Is the error temporary? }
Contextuel Erreurs
Utilisez cette technique avec Go 1.13 ou version ultérieure pour fournir un contexte supplémentaire à une erreur existante.
func SomepackageFunction() error { err := somethingThatCanFail() if err != nil { return fmt.Errorf("some context: %w", err) } }
Le choix de l'approche dépend si vous prévoyez que les utilisateurs devront tester erreurs spécifiques et possibilité pour plusieurs utilisateurs de mettre en œuvre leur propre gestion des erreurs.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!