Maison > développement back-end > Golang > Comment puis-je gérer efficacement plusieurs erreurs dans Go ?

Comment puis-je gérer efficacement plusieurs erreurs dans Go ?

Patricia Arquette
Libérer: 2024-11-30 07:22:11
original
629 Les gens l'ont consulté

How Can I Efficiently Handle Multiple Errors in Go?

Gestion de plusieurs erreurs dans Go

La gestion des erreurs dans Go met l'accent sur la vérification explicite des erreurs là où elles se produisent. Cependant, cela peut conduire à un code verbeux lors de la gestion de plusieurs erreurs dans un seul bloc.

Considérez cet exemple artificiel :

package main

import (
    "fmt"
    "io"
    "io/ioutil"
    "os/exec"
)

func main() {
    cmd := exec.Command("cat", "-")
    stdin, err := cmd.StdinPipe()
    if err != nil {
        return
    }
    stdout, err := cmd.StdoutPipe()
    if err != nil {
        return
    }
    err = cmd.Start()
    if err != nil {
        return
    }
    _, err = io.WriteString(stdin, "Hello world!")
    if err != nil {
        return
    }
    err = stdin.Close()
    if err != nil {
        return
    }
    output, err := ioutil.ReadAll(stdout)
    if err != nil {
        return
    }
    fmt.Println(string(output))
    return
}
Copier après la connexion

Chaque ligne de gestion des erreurs ajoute trois lignes de code supplémentaires. Beaucoup de ces erreurs ne sont pas fatales ou traitées ailleurs, ce qui conduit à une augmentation perçue du passe-partout.

Gestion des erreurs idiomatiques

Une approche idiomatique consiste à renvoyer les erreurs des fonctions et gérez-les explicitement dans le code appelant.

package main

import (
    "fmt"
    "os"

    "errors"
)

func piping(input string) (string, error) {
    cmd := exec.Command("cat", "-")
    stdin, err := cmd.StdinPipe()
    if err != nil {
        return "", err
    }
    stdout, err := cmd.StdoutPipe()
    if err != nil {
        return "", err
    }
    if err = cmd.Start(); err != nil {
        return "", err
    }
    if _, err = io.WriteString(stdin, input); err != nil {
        return "", err
    }
    if err = stdin.Close(); err != nil {
        return "", err
    }
    all, err := ioutil.ReadAll(stdout)
    if err != nil {
        return "", err
    }
    return string(all), nil
}

func main() {
    in := "Hello world!"
    fmt.Println(in)
    out, err := piping(in)
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }
    fmt.Println(out)
}
Copier après la connexion

Dans cet exemple, piping() renvoie à la fois la sortie et toute erreur rencontrée. Le code appelant peut alors gérer l'erreur ou la propager si nécessaire.

Gestion des erreurs dans Go

Dans Go, la gestion explicite des erreurs est essentielle. Les vérifications explicites if err != nil encouragent les programmeurs à gérer les erreurs immédiatement, évitant ainsi les erreurs non gérées qui pourraient conduire à un comportement inattendu du programme.

Bien que cette approche puisse conduire à un code verbeux dans certains cas, elle favorise une approche disciplinée de gestion des erreurs et maintenabilité.

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