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 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) }
我们可以使用 recover
从 panic 中恢复,并打印一个更友好的错误消息:
func main() { defer func() { if err := recover(); err != nil { fmt.Println("Error:", err) } }() DivideByZero(10, 0) }
输出:
Error: division by zero
注意
defer
语句用于在函数返回之前运行恢复函数。interface{}
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 🎜🎜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!