Maison >développement back-end >Golang >Comment utiliser la fonction recovery() de Golang pour gérer les paniques ?
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.
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()
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 : 🎜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!