Maison >développement back-end >Golang >Comment utiliser la fonction recovery() de Golang pour gérer les paniques ?

Comment utiliser la fonction recovery() de Golang pour gérer les paniques ?

WBOY
WBOYoriginal
2024-06-01 14:42:56340parcourir

En utilisant la fonction recovery(), vous pouvez capturer les paniques dans le contexte de la fonction actuelle, éviter les plantages du programme et gérer les erreurs avec élégance : recovery() renvoie zéro lorsqu'aucune panique ne se produit, retourne lorsqu'une panique non détectée se produit ou lors de la récupération de la fonction où la panique s'est produite. Valeur de panique. Ajoutez des rappels différés autour des appels de fonction pour détecter les paniques et effectuer une gestion personnalisée, telle que la journalisation des informations sur les erreurs. recovery() capture uniquement les paniques dans le contexte de fonction actuel, n'annule pas les paniques et ne fonctionne que sur les erreurs non gérées.

如何使用 Golang 的 recover() 函数处理恐慌?

Comment utiliser la fonction recovery() de Golang pour gérer la panique

Introduction

La panique est un mécanisme spécial de gestion des erreurs dans le langage Go. Lorsque le programme rencontre une erreur qui ne peut pas être gérée, cela provoquera. le programme plante. La fonction recover() détecte et gère les paniques, permettant au programme de se remettre facilement de l'erreur. recover() 函数可以捕获并处理恐慌,允许程序优雅地从错误中恢复。

recover() 函数

recover() 函数是一个内置函数,可以从当前函数上下文中捕获最近发生的恐慌。它在以下情况下返回:

  • 发生了恐慌,并且未被捕获。
  • 程序从发生恐慌的函数中恢复。

如果未发生恐慌,recover() 将返回 nil 值。

实战案例

考虑一个读取文件的函数,该函数可能会出现以下错误:

func readFile(filename string) ([]byte, error) {
    data, err := os.ReadFile(filename)
    if err != nil {
        return nil, err
    }
    return data, nil
}

要使用 recover() 函数捕获此错误,可以在调用函数周围添加 defer 语句:

func main() {
    defer func() {
        if err := recover(); err != nil {
            log.Printf("捕获到恐慌: %v", err)
        }
    }()

    _, err := readFile("non-existent-file.txt")
    if err != nil {
        log.Printf("读取文件出错:%v", err)
    }
}

当程序尝试读取不存在的文件时,将发生恐慌,然后通过 defer 回调中的 recover() 函数捕获该恐慌。这允许程序记录错误并优雅地退出。

注意事项

  • recover() 只能捕获来自当前函数上下文的恐慌,因此如果恐慌发生在嵌套函数中,则无法捕获。
  • recover() 函数不会取消恐慌,这意味着即使捕获到恐慌,程序也会继续崩溃。
  • recover()
Fonction recover() 🎜🎜🎜La fonction recover() est une fonction intégrée qui capture la panique la plus récente à partir du contexte de fonction actuel. Il est restitué si : 🎜
  • Une panique s'est produite et n'a pas été détectée. 🎜
  • Le programme récupère de la fonction panique. 🎜🎜🎜Si aucune panique ne se produit, recover() renverra une valeur nil. 🎜🎜🎜Cas pratique🎜🎜🎜Considérons une fonction qui lit un fichier, qui peut générer l'erreur suivante : 🎜rrreee🎜Pour détecter cette erreur à l'aide de la fonction recover(), vous pouvez ajouter autour de l'appelant instruction defer de la fonction : 🎜rrreee🎜Lorsque le programme essaie de lire un fichier qui n'existe pas, il paniquera puis passera recover() dans le defer callback > Function capture la panique. Cela permet au programme de consigner les erreurs et de se terminer correctement. 🎜🎜🎜Notes🎜🎜<ul> <li> <code>recover() ne peut capturer les paniques qu'à partir du contexte de fonction actuel, donc si la panique se produit dans une fonction imbriquée, elle ne peut pas être capturée. 🎜
  • recover() La fonction n'annule pas la panique, ce qui signifie que le programme continuera à planter même si la panique est détectée. 🎜
  • recover() La fonction ne doit être utilisée que pour gérer les erreurs non gérées et ne doit pas remplacer les mécanismes normaux de 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