Gérer les panics avec la fonction recover en Golang

GolangGolangBeginner
Pratiquer maintenant

This tutorial is from open-source community. Access the source code

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

En Golang, recover est une fonction intégrée qui peut être utilisée pour récupérer d'un panic. Ce laboratoire vous permettra de tester votre capacité à utiliser recover pour gérer les panic.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL go(("Golang")) -.-> go/ErrorHandlingGroup(["Error Handling"]) go/ErrorHandlingGroup -.-> go/recover("Recover") subgraph Lab Skills go/recover -.-> lab-15500{{"Gérer les panics avec la fonction recover en Golang"}} end

Recover

La fonction mayPanic dans le code fourni provoquera un panic lorsqu'elle sera appelée. Votre tâche consiste à modifier la fonction main pour récupérer du panic et afficher le message d'erreur.

  • Utilisez la fonction recover pour gérer le panic dans la fonction mayPanic.
  • Affichez le message d'erreur lorsqu'un panic se produit.
$ go run recover.go
Recovered. Error:
a problem

Voici le code complet ci-dessous :

// Go permet de _récupérer_ d'un `panic`, en utilisant
// la fonction intégrée `recover`. Un `recover` peut
// empêcher un `panic` d'arrêter le programme et le laisser
// continuer l'exécution à la place.

// Un exemple où cela peut être utile : un serveur
// ne veut pas planter si l'une des connexions clientes
// présente une erreur critique. Au lieu de cela, le serveur
// voudrait fermer cette connexion et continuer à servir
// les autres clients. En fait, c'est ce que fait par défaut
// Go's `net/http` pour les serveurs HTTP.

package main

import "fmt"

// Cette fonction provoque un `panic`.
func mayPanic() {
	panic("a problem")
}

func main() {
	// `recover` doit être appelé dans une fonction différée.
	// Lorsque la fonction englobante provoque un `panic`, le
	// différé sera activé et un appel à `recover` à l'intérieur
	// de celui-ci capturera le `panic`.
	defer func() {
		if r := recover(); r!= nil {
			// La valeur de retour de `recover` est l'erreur levée dans
			// l'appel à `panic`.
			fmt.Println("Recovered. Error:\n", r)
		}
	}()

	mayPanic()

	// Ce code ne sera pas exécuté, car `mayPanic` provoque un `panic`.
	// L'exécution de `main` s'arrête au moment du `panic` et
	// reprend dans la fermeture différée.
	fmt.Println("After mayPanic()")
}

Summary

Dans ce laboratoire, vous avez appris à utiliser la fonction recover pour gérer les panic en Golang. En utilisant recover, vous pouvez empêcher votre programme de planter et continuer à exécuter le code.