Maison > développement back-end > Golang > Comment la fonction de récupération dans la fonction Golang est-elle implémentée ?

Comment la fonction de récupération dans la fonction Golang est-elle implémentée ?

王林
Libérer: 2024-06-05 15:15:01
original
416 Les gens l'ont consulté

La fonction de récupération dans le langage Go est implémentée via le planificateur pour gérer l'enregistrement de panique dans la goroutine, qui est utilisée pour capturer et gérer les erreurs inattendues. Il capture uniquement la panique dans la goroutine actuelle et utilise l'instruction defer pour exécuter la fonction de récupération avant le retour de la fonction. La fonction de récupération reçoit la valeur de panique de type interface{} et imprime un message d'erreur plus convivial.

Comment la fonction de récupération dans la fonction Golang est-elle implémentée ?

Comment la fonction de récupération dans la fonction Go est implémentée

La fonction recover dans le langage Go permet de récupérer de la panique suite à l'exécution de goroutine. Il est très utile pour détecter et gérer les erreurs inattendues. recover 函数允许从正在运行的 goroutine 中恢复 panic。它在捕获和处理意外错误方面非常有用。

实现

recover 的实现基于 Go 语言的调度程序。调度程序负责管理 goroutine 的执行。它维护着一个 panic 记录,其中存储了最新发生的 panic 值。

当 panic 发生时,调度程序将 panic 值保存在 panic 记录中,并终止当前正在执行的 goroutine。然后,它将控制权交给将该 goroutine 标记为 "dead" 的 runtime。

如果其他 goroutine 正在等待该 goroutine 退出,它们将收到一个 Recover 消息。该消息包含 panic 记录中的 panic 值。

实战案例

假设我们有一个可能引发 panic 的函数:

func DivideByZero(x, y int) {
    if y == 0 {
        panic("division by zero")
    }
    fmt.Println(x / y)
}
Copier après la connexion

我们可以使用 recover 从 panic 中恢复,并打印一个更友好的错误消息:

func main() {
    defer func() {
        if err := recover(); err != nil {
            fmt.Println("Error:", err)
        }
    }()

    DivideByZero(10, 0)
}
Copier après la connexion

输出:

Error: division by zero
Copier après la connexion

注意

  • defer 语句用于在函数返回之前运行恢复函数。
  • 恢复函数是一个匿名函数,它需要一个 interface{}
  • implémentation
🎜recover est basé sur le planificateur de langage Go. Le planificateur est chargé de gérer l’exécution des goroutines. Il conserve un enregistrement de panique, qui stocke la dernière valeur de panique. 🎜🎜Lorsqu'une panique se produit, le planificateur enregistre la valeur de panique dans l'enregistrement de panique et met fin à la goroutine en cours d'exécution. Il confie ensuite le contrôle au runtime qui marque la goroutine comme "morte". 🎜🎜Si d'autres goroutines attendent la sortie de cette goroutine, ils recevront un message Récupérer. Le message contient la valeur de panique de l'enregistrement de panique. 🎜🎜🎜Cas pratique🎜🎜🎜Supposons que nous ayons une fonction qui peut provoquer une panique : 🎜rrreee🎜Nous pouvons utiliser recover pour récupérer de la panique et afficher un message d'erreur plus convivial : 🎜rrreee🎜Sortie :🎜rrreee🎜🎜Remarque 🎜🎜
    🎜L'instruction defer est utilisée pour exécuter la fonction de récupération avant le retour de la fonction. 🎜🎜La fonction de récupération est une fonction anonyme qui nécessite un paramètre de type interface{} pour recevoir la valeur de panique. 🎜🎜La fonction de récupération ne capture que les paniques dans la goroutine actuelle. Il ne peut pas détecter les paniques dans les autres goroutines. 🎜🎜

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