Maison > développement back-end > Golang > Comment Go peut-il gérer efficacement plusieurs erreurs dans un seul bloc ?

Comment Go peut-il gérer efficacement plusieurs erreurs dans un seul bloc ?

Patricia Arquette
Libérer: 2024-12-09 03:09:16
original
665 Les gens l'ont consulté

How Can Go Efficiently Handle Multiple Errors in a Single Block?

Gérer plusieurs erreurs avec élégance dans Go

Dans Go, il est souvent nécessaire de gérer plusieurs erreurs à la fois, en particulier lorsqu'il s'agit d'E/S. opérations ou transformations de données. Alors que l'approche traditionnelle consistant à vérifier chaque erreur individuellement peut être fastidieuse et répétitive, Go fournit un mécanisme pour gérer toutes les erreurs dans un seul bloc concis.

Problème : gestion de plusieurs erreurs

Considérez le code suivant qui tente de rassembler plusieurs valeurs en JSON :

aJson, err1 := json.Marshal(a)
bJson, err2 := json.Marshal(b)
cJson, err3 := json.Marshal(c)
dJson, err4 := json.Marshal(d)
eJson, err5 := json.Marshal(e)
fJson, err6 := json.Marshal(f)
gJson, err4 := json.Marshal(g)
if err1 != nil {
    return err1
} else if err2 != nil {
    return err2
} else if err3 != nil {
    return err3
} else if err4 != nil {
    return err4
} else if err5 != nil {
    return err5
} else if err5 != nil {
    return err5
} else if err6 != nil {
    return err6
}
Copier après la connexion

Ce code est sujet aux erreurs et nécessite contrôles répétitifs de gestion des erreurs pour chaque opération de marshaling. Cela rend également difficile la gestion des erreurs pour tous les objets JSON.

Solution : Utiliser une variable non locale pour la détection des erreurs

Go fournit un moyen simple de gérer plusieurs erreurs dans un seul bloc utilisant une variable non locale. Voici une version améliorée du code :

var err error
f := func(dest *D, src S) bool {
    *dest, err = json.Marshal(src)
    return err == nil
}

f(&aJson, a) &&
    f(&bJson, b) &&
    f(&cJson, c) &&
    f(&dJson, d) &&
    f(&eJson, e) &&
    f(&fJson, f) &&
    f(&gJson, g)
return err
Copier après la connexion

Dans cette solution, nous définissons une fonction f qui effectue le marshaling et définit la variable err. La variable err est déclarée en dehors de la fonction, ce qui lui permet d'être partagée entre tous les appels à la fonction f.

La fonction f prend des pointeurs vers les objets JSON de destination et les données source. Il renvoie un bool indiquant si le marshaling a réussi (aucune erreur ne s'est produite).

Ensuite, nous appelons la fonction f pour chaque objet et connectons les résultats avec && (et logique). Si l'un des appels renvoie false (une erreur s'est produite), la chaîne est interrompue et la variable err contient la première erreur rencontrée. Sinon, si tous les appels renvoient vrai, aucune erreur ne s'est produite et l'erreur finale est nulle.

Dans la dernière ligne, nous renvoyons la variable err, qui contient la première erreur rencontrée, ou nil si toutes les opérations ont réussi .

Cette approche nous permet de gérer toutes les erreurs dans une seule instruction, ce qui rend la gestion des erreurs plus concise et efficace.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal