Maison > développement back-end > Golang > le corps du texte

Utilisez le mécanisme d'emballage et de déroulement des erreurs de Golang pour la gestion des erreurs

WBOY
Libérer: 2024-04-25 08:15:02
original
960 Les gens l'ont consulté

La gestion des erreurs dans Go inclut les erreurs d’encapsulage et les erreurs de déroulement. L'encapsulation des erreurs permet d'encapsuler un type d'erreur avec un autre, fournissant ainsi un contexte plus riche pour l'erreur. Développez les erreurs et parcourez la chaîne d'erreurs imbriquée pour trouver l'erreur de niveau le plus bas pour un débogage facile. En combinant ces deux techniques, les conditions d'erreur peuvent être gérées efficacement, offrant un contexte d'erreur plus riche et de meilleures capacités de débogage.

Utilisez le mécanisme demballage et de déroulement des erreurs de Golang pour la gestion des erreurs

Utilisez le mécanisme d'emballage et de déballage des erreurs de Go pour la gestion des erreurs

Dans Go, la gestion des erreurs est cruciale et nous permet de gérer les conditions d'erreur qui se produisent lors de l'exécution du programme. Les erreurs d’emballage et de déballage sont deux techniques courantes de gestion des erreurs dans Go qui offrent un contrôle plus précis sur la gestion des erreurs.

Encapsulage des erreurs

L'encapsulation des erreurs nous permet d'encapsuler un type d'erreur avec un autre, créant ainsi des erreurs avec un contexte plus riche. Ce faisant, nous pouvons fournir des informations supplémentaires sur la source et la cause de l’erreur, ce qui facilite une gestion plus robuste des erreurs.

import (
    "errors"
    "fmt"
)

type DBError struct {
    error
}

func (e *DBError) Unwrap() error {
    return e.error
}

func main() {
    // 原始数据库错误
    origErr := errors.New("database connection failed")

    // 包装数据库错误
    wrappedErr := &DBError{
        error: fmt.Errorf("failed to connect to database: %w", origErr),
    }

    // 处理包装后的错误
    switch {
    case errors.Is(wrappedErr, errors.New("database connection failed")):
        fmt.Println("Database connection failed.")
    }
}
Copier après la connexion

Dans l'exemple ci-dessus, le type DBError encapsule l'erreur brute de la base de données (origErr) et fournit des informations contextuelles supplémentaires. Nous utilisons fmt.Errorf pour créer l'erreur encapsulée, et la fonction errors.Is est utilisée pour comparer si l'erreur encapsulée correspond à l'erreur de base de données d'origine. DBError 类型包装了原始的数据库错误 (origErr),并提供了额外的上下文信息。我们使用 fmt.Errorf 来创建包装后的错误,errors.Is 函数用于比较包装后的错误是否与原始的数据库错误匹配。

展开错误

展开错误是一种遍历嵌套错误链的机制,直到找到最底层的错误。这对于理解错误的根本原因以及调试目的非常有用。

import (
    "fmt"
)

func f1(s string) error {
    if s == "" {
        return errors.New("empty string")
    }
    return nil
}

func f2(s string) error {
    if err := f1(s); err != nil {
        return fmt.Errorf("f1() failed: %w", err)
    }
    return nil
}

func main() {
    // 嵌套错误
    err := f2("")

    for {
        // 检查错误是否为 nil
        if err == nil {
            break
        }

        // 展开错误
        fmt.Println(err)
        err = errors.Unwrap(err)
    }
}
Copier après la connexion

在上面的例子中,f2 函数包装了 f1 函数的错误。errors.Unwrap

Développer les erreurs

🎜🎜Développer les erreurs est un mécanisme qui parcourt une chaîne d'erreurs imbriquées jusqu'à ce que l'erreur de niveau le plus bas soit trouvée. Ceci est utile pour comprendre la cause première des erreurs ainsi qu’à des fins de débogage. 🎜rrreee🎜Dans l'exemple ci-dessus, la fonction f2 encapsule l'erreur de la fonction f1. La fonction errors.Unwrap déballe les erreurs imbriquées, nous permettant de parcourir la chaîne d'erreurs et d'imprimer chaque erreur. 🎜🎜En combinant les erreurs d'encapsulage et les erreurs de déballage, nous pouvons gérer efficacement les conditions d'erreur dans les programmes Go et fournir un contexte d'erreur plus riche et de meilleures capacités de débogage. 🎜

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!

Étiquettes associées:
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal