Maison > développement back-end > Golang > Stratégie de gestion des erreurs pour les fonctions Golang

Stratégie de gestion des erreurs pour les fonctions Golang

王林
Libérer: 2024-04-15 15:15:01
original
638 Les gens l'ont consulté

Le langage Go fournit le mécanisme de gestion des erreurs suivant : Gérer directement les erreurs : vérifiez la variable err dans le corps de la fonction. Utiliser defer : exécutez le code lorsque la fonction se termine, que la fonction renvoie un résultat normal ou une erreur, pour nettoyer les ressources ou imprimer un message d'erreur. Utilisez recovery : capturez les paniques d'exécution, généralement causées par des erreurs non gérées. Types personnalisés et habillage d'erreurs : créez des types d'erreur personnalisés et encapsulez d'autres erreurs à l'aide des fonctions erreurs.Is et erreurs.As, autorisant les assertions de type.

Stratégie de gestion des erreurs pour les fonctions Golang

Stratégie de gestion des erreurs pour les fonctions Go

Le langage Go fournit un puissant mécanisme de gestion des erreurs qui permet aux développeurs de gérer les erreurs de manière claire et unifiée. Cet article présentera différentes stratégies de gestion des erreurs dans Go et les démontrera à travers des cas pratiques.

Définition et retour des valeurs d'erreur

Dans Go, les valeurs d'erreur sont représentées par l'interface error, qui est juste un type qui implémente la méthode Error() . Les valeurs d'erreur sont généralement créées via la fonction nil ou errors.New(). Voici comment définir et renvoyer une valeur d'erreur : error 接口表示,它只是一个实现了 Error() 方法的类型。错误值通常通过 nilerrors.New() 函数来创建。以下是如何定义和返回一个错误值:

func myFunction() error {
    return errors.New("error message")
}
Copier après la connexion

直接处理错误

最简单的方法是直接处理错误,方法是在函数体中检查 err 变量:

func main() {
    if err := myFunction(); err != nil {
        log.Println(err)
    }
}
Copier après la connexion

使用 defer

defer 语句允许在函数退出时执行代码,无论该函数是否返回正常或错误。这可以用于清理资源或打印错误消息:

func main() {
    defer func() {
        if err := recover(); err != nil {
            log.Println(err)
        }
    }()

    myFunction()
}
Copier après la connexion

使用 recover

recover 函数可以捕获运行时恐慌,它通常是由未处理的错误引起的。可以通过在 main 函数中调用 recover 来处理未处理的错误:

func main() {
    if err := recover(); err != nil {
        log.Println(err)
    }

    myFunction()
}
Copier après la connexion

自定义类型和错误包装

对于复杂场景,可以创建自定义错误类型并使用 errors.Iserrors.As 函数包装其他错误。这允许在错误层次结构中进行类型断言:

type MyError struct {
    error
}

func main() {
    if err := myFunction(); err != nil {
        if myError, ok := err.(MyError); ok {
            log.Println(myError)
        } else {
            log.Println(err)
        }
    }
}
Copier après la connexion

实战案例

考虑一个需要连接到数据库并执行查询的应用程序。应用程序可以按照以下方式处理错误:

func main() {
    db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/database")
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    rows, err := db.Query("SELECT * FROM table")
    if err != nil {
        log.Println(err)
        return
    }
    defer rows.Close()

    for rows.Next() {
        var name string
        if err := rows.Scan(&name); err != nil {
            log.Println(err)
            continue
        }
        log.Println(name)
    }
}
Copier après la connexion

应用程序使用 deferrrreee

Gérer les erreurs directement🎜🎜Le moyen le plus simple est de gérer les erreurs directement en vérifiant la variable err dans le corps de la fonction : 🎜rrreee🎜Utilisez defer🎜🎜defer permet d'exécuter du code lorsqu'une fonction se termine, que la fonction renvoie un résultat normal ou une erreur. Cela peut être utilisé pour nettoyer les ressources ou imprimer des messages d'erreur : 🎜rrreee🎜Utilisez la fonction recover 🎜🎜recover pour détecter les paniques d'exécution, qui sont généralement causées par des erreurs non gérées. Les erreurs non gérées peuvent être gérées en appelant recover dans la fonction main : 🎜rrreee🎜Types personnalisés et emballage d'erreurs🎜🎜Pour les scénarios complexes, des types d'erreur personnalisés peuvent être créés et envelopper d'autres erreurs à l'aide des fonctions errors.Is et errors.As. Cela permet des assertions de type dans des hiérarchies d'erreurs : 🎜rrreee🎜 Exemple pratique 🎜🎜 Considérons une application qui doit se connecter à une base de données et exécuter des requêtes. Les applications peuvent gérer les erreurs comme suit : 🎜rrreee🎜 Les applications utilisent l'instruction defer pour garantir que les descripteurs de base de données et de requête sont correctement fermés lorsqu'une erreur est rencontrée. Il utilise également la gestion directe des erreurs pour imprimer les messages d'erreur et poursuivre le traitement afin d'éviter d'interrompre l'ensemble de l'application en raison d'une seule erreur. 🎜

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