La fonction de récupération de Golang est utilisée pour récupérer un goroutine d'une panique. Pensez-y comme un bloc d'essai / capture dans d'autres langages de programmation. Nous pouvons utiliser la méthode de récupération pour récupérer le programme à partir d'une erreur soulevée par une méthode de panique. Cela nous aide à gérer gracieusement les erreurs en cas d'erreurs plutôt que de mettre fin au programme.
Explorons comment nous pouvons utiliser la méthode de récupération pour récupérer un programme à partir d'une panique.
Méthode de récupération de Golang
La méthode de récupération est une méthode intégrée définie dans le package intégré Go. La syntaxe de fonction est comme indiqué:
func recouvring () interface
Pour mettre en œuvre la fonction de récupération de manière appropriée, les conditions suivantes doivent être remplies:
- Appelez toujours la fonction de récupération à l'intérieur d'une fonction différée. En effet, les méthodes différées ne se terminent pas dans le cas d'une panique. Cela les rend capables de récupérer le programme une fois qu'une panique se produit. Consultez notre tutoriel sur Golang Panic pour en savoir plus.
- La méthode de récupération est uniquement applicable dans un goroutine qui rencontre une panique. S'il est appelé dans un goroutine qui ne ressent pas la panique, la récupération ne fonctionne pas.
Exemple 1
L'exemple ci-dessous illustre comment utiliser la méthode de récupération.
package principal
Importer "FMT"
func panic_me ()
panique ("gaspillé!")
func main ()
différer func ()
Si rec: = recouvring (); récolte != nil
fmt.Println ("ouf!, Je suis sauvé ")
()
panic_me ()
fmt.Println ("je ne peux pas courir")
Dans l'exemple ci-dessus, nous créons une fonction qui panique. À l'intérieur de la fonction principale, nous créons une fonction de différence qui essaie de récupérer le programme. Si la récupération est un succès, il imprime un message à l'intérieur du bloc IF.
Si nous exécutons le programme ci-dessus, nous devons obtenir une sortie comme indiqué:
$ go run recome.aller
Ouf!, Je suis sauvé
Notez que le message à l'intérieur du bloc principal ne s'exécute pas. En effet, la fonction principale est détruite immédiatement après la panique. Seule la méthode différée peut fonctionner après une panique.
Exemple 2
L'exemple ci-dessous illustre également comment récupérer un programme à partir d'un index hors de base.
package principal
importer (
"FMT"
"Runtime / Debug"
)
func netpanic ()
Si rec: = recouvring (); récolte != nil
fmt.Println ("J'ai presque mort")
déboguer.Printstack ()
func getValue (slice [] int, index int)
Si index> (len (tranche) - 1)
Panique ("Accès à l'index illégal!")
fmt.Println (tranche [index])
func main ()
slc: = [] int 1, 2, 3
différer Dontpanic ()
getValue (SLC, 5)
Dans l'exemple ci-dessus, nous créons une fonction qui gère la panique à l'aide de la méthode de récupération et imprime la trace de pile à l'aide du débogage.Printstack () Méthode.
Maintenant, si vous essayez d'accéder à un élément avec un index hors limites, la méthode de récupération gère la panique.
Le code ci-dessus doit renvoyer une erreur comme:
J'ai failli mourir
Goroutine 1 [Running]:
Exécution / débogage.Empiler()
C: / Program Files / go / src / runtime / debug / pile.Go: 24 + 0x65
Exécution / débogage.Printstack ()
C: / Program Files / go / src / runtime / debug / pile.Go: 16 + 0x19
principal.ne pas paniquer()
récupérer.Allez: 15 + 0x6a
panique (0xa54b20, 0xa861b8)
C: / / Program Files / Go / Src / Runtime / Panic.Go: 1038 + 0x215
principal.getValue (0xc0000cdf50, 0xc0000cdf70, 0x9c52b9, 0x60)
récupérer.Go: 19 + 0x98
principal.principal()
récupérer.aller: 33 + 0x7e
Ce qui précède représente la trace de pile lorsque le programme panique.
Conclusion
Dans cet article, nous couvrons comment récupérer un programme d'une panique en utilisant la méthode de récupération. Nous avons également appris à faire la trace de la pile si un programme panique en utilisant le débogage.Méthode Panic ().