Maison >développement back-end >Golang >Comment gérer au mieux les erreurs dans Go ?

Comment gérer au mieux les erreurs dans Go ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-27 10:06:10550parcourir

How to Best Handle Errors in Go?

Variables d'erreur standard dans Go

Dans Golang, il existe plusieurs approches idiomatiques pour gérer les erreurs.

Variables d'erreur personnalisées

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")
)

Types d'erreurs

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn